干涸一个普通的R代码模式

干涸一个普通的R代码模式,r,R,我得到了一些r代码中相当常见的模式。我有一个带有数字向量的数据框,我想根据数字向量的特定值创建另一个因子变量 目前,我的代码是这样的: add_category <- function(sample) { sample$category <- NA sample$category[sample$numeric_vars < 25000] <- '1. Below 25k' sample$category[sample$numeric_vars >=

我得到了一些r代码中相当常见的模式。我有一个带有数字向量的数据框,我想根据数字向量的特定值创建另一个因子变量

目前,我的代码是这样的:

add_category <- function(sample) {
   sample$category <- NA
   sample$category[sample$numeric_vars < 25000] <- '1. Below 25k'
   sample$category[sample$numeric_vars >= 25000] <- '2. Above 25k'
   sample$category[sample$numeric_vars >= 50000] <- '3. Above 50k'
   sample$category <- as.factor(sample$category)
   return(sample)
}

add_category我可以删掉几行。否则看起来不错

add_category <- function(sample) {
    sample$category <- '1. Below 25k'
    sample$category[sample$numeric_vars >= 25000] <- '2. Above 25k'
    sample$category[sample$numeric_vars >= 50000] <- '3. Above 50k'
    return(sample)
}

add_category只有几个级别,在这种情况下,手动添加仍然是合理的

df <- data.frame(numeric.var = runif(100000,0,75000))
add_Cat <- function(var) {
  as.factor(ifelse(var > 50000, "3. Above 50k",
    ifelse(var > 25000, "2. Above 25k", "1. Below 25k'")))
}

您可以使用
cut
减少代码行数。i、 e.
cut(示例$numeric\u vars,breaks=c(-Inf,25000,50000,Inf),labels=yourlabels)
数据示例如下helpful@Khashaa是的,这一章很有用,但在这一章中,Hadley讨论了在不同的列上应用类似的操作,这是在一个具有不同值的列上。另一个选项是
factor(1+2*(v1<25000)+4*(v1>=25000)+8*(v1>=50000),labels=c('1.低于25k','2.高于25k','3.高于50k'))
其中
v1
是值的向量。如果你想问一个一般原则,我会说你的问题有点太宽泛了,我认为哈德利在他的书中雄辩地阐述了它。当然,让我们看看复杂的版本!
microbenchmark(add_Cat(df), add_category(df))
Unit: microseconds
            expr       min         lq       mean    median         uq        max neval
     add_Cat(df) 69179.970 70801.9170 72700.5511 71881.748 72627.1110 144267.491   100
add_category(df)   690.199   728.6855   894.3915   778.535   803.2765   2717.907   100