【发布时间】:2015-07-14 05:59:48
【问题描述】:
我在一些 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)
}
我遇到的问题是这段代码有很多重复,我不能轻易测试它。我一直在努力想办法减少重复,但我已经用头撞了几个小时,但没有取得多大成功。
所以我的问题是,如何在基础 R 中以 DRY 方式复制这种模式?
编辑:
所以为了让这个更清楚一点,我知道我可以使用cut 来解决这个特殊问题。我对解决这类问题的策略更感兴趣,即根据对另一个变量的特定实例的一些测试来重新编码一个单独的变量。
在 Hadley 的高级 R 函数编程部分中,他使用了将 -99 重新编码为 NA 的示例。这是类似的,但对于一列上的各种值。
【问题讨论】:
-
您可以使用
cut减少代码行数。即cut(sample$numeric_vars, breaks=c(-Inf, 25000, 50000,Inf), labels=yourlabels)示例数据会有所帮助 -
@Khashaa 是的,那一章很有用,但其中 Hadley 正在讨论在各种列中应用类似的操作,这是在具有各种值的一列上。
-
另一个选项是
factor(1+ 2*(v1 < 25000) + 4*(v1 >= 25000) + 8*(v1 >= 50000), labels=c('1. Below 25k', '2. Above 25k', '3. Above 50k')),其中v1是值的向量。 -
如果你问的是一般原则,我会说你的问题有点过于宽泛,我认为 Hadley 在他的书中雄辩地解决了这个问题。
标签: r