【问题标题】:create lables from bins从垃圾箱创建标签
【发布时间】:2021-01-21 22:18:23
【问题描述】:

我正在使用cut 函数,:

my_data[, ageGroup :=cut(my_data$age,
                         breaks = c(0, ageBins),
                         include.lowest=TRUE,
                         labels = ageBins)]

在哪里

breaks
[1]  0  6 18 29 49 59 69 99

目前我的标签存储在向量中:

ageBins
[1]  6 18 29 49 59 69 99

我想知道如何以实用的方式创建标签,以便它们指示间隔:0-6、6-18、29-49 等?

之后我使用了拆分功能,

setNames(split(my_data, my_data$ageGroup), 
         unique(my_data$ageGroup))

并希望列表以相应的间隔命名。

【问题讨论】:

  • 您的问题不清楚。你想要的输出到底是什么?情节中的标签?还是在数据框中的新列中?您还应该提供一些虚拟数据。这样我们才能更好地帮助您弄清楚如何到达您需要的地方。

标签: r function text label


【解决方案1】:

您可以将连续的breaks粘贴在一起使用。

ageBins <- c(6, 18, 29, 49, 59, 69, 99)
breaks = c(0, ageBins)
labels <- paste(breaks[-length(breaks)], breaks[-1], sep = '-')
#Also another way
#labels <- paste(head(breaks, -1), tail(breaks, -1), sep = '-')

labels
#[1] "0-6"   "6-18"  "18-29" "29-49" "49-59" "59-69" "69-99"

【讨论】:

    【解决方案2】:

    您可以使用zoo::rollapply 执行此操作,但您需要将其传递给breaks 或将ageBins 中的值初始化为0

    library(zoo)
    
    zoo::rollapply(breaks, width = 2, FUN = function(x) paste(x, collapse = "-"))
    [1] "0-18"  "18-29" "29-49" "49-59" "59-69" "69-99"
    

    或者使用同名库中的函数runner

    library(runner)
    
    runner::runner(breaks, function(x) paste(x, collapse = "-"), k = 2)[-1]
    [1] "0-18"  "18-29" "29-49" "49-59" "59-69" "69-99"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-24
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多