【问题标题】:How do I add ranges to a vector in R?如何将范围添加到 R 中的向量?
【发布时间】:2015-03-06 06:58:28
【问题描述】:

我正在尝试创建一个看起来像“

age.cat <- function(x, lower = 0, upper, by = 10,
                   sep = "-", above.char = "+") {

 labs <- c(paste(seq(lower, upper - by, by = by),
                 seq(lower + by - 1, upper - 1, by = by),
                 sep = sep),
           paste(upper, above.char, sep = ""))

 cut(floor(x), breaks = c(seq(lower, upper, by = by), Inf),
     right = FALSE, labels = labs)
}

任何帮助将不胜感激。谢谢

【问题讨论】:

  • 我会在数据框中创建单独的列,例如df$col2[df$col1 &lt; 18] &lt;- "[0-18]"。或者类似的东西。每个括号以此类推。
  • @A.Val。 OP 想要“
  • 我认为这是人口统计数据,因此 18 岁以下的年龄段是 0-18 岁。但这不是重点,他可以写任何他想要的字符串,我只是举个例子。

标签: r binning


【解决方案1】:

你想要

library(Hmisc)
cut2(age, cuts=c(19, 25, 35, 45, 55, 65))

【讨论】:

    【解决方案2】:

    cut 函数有很多参数决定如何进行切割,这些参数反映在输出符号中。间隔需要全部右闭(默认)或全部左闭:

    vals <- 1:100
     cats <-cut( vals, breaks = c(0,18,seq(25,65,by=10),Inf))
     table(cats)
    #----------
    cats
      (0,18]  (18,25]  (25,35]  (35,45]  (45,55]  (55,65] (65,Inf] 
          18        7       10       10       10       10       35
    

    然后修改levels属性:

     levels(cats) <-  sub("\\,Inf\\]", "+", sub("\\(0\\,", "<", levels(cats) ))
     table(cats)
    #------------
    cats
       <18] (18,25] (25,35] (35,45] (45,55] (55,65]    (65+ 
         18       7      10      10      10      10      35 
    

    我同意 @animalito 的观点,即 Hmisc::cut2 函数的默认值更符合我的喜好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2022-10-19
      • 2015-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多