【发布时间】:2014-11-04 06:32:43
【问题描述】:
我正在尝试实现类似于 this question 的东西,但在大型数据集中使用多个必须替换为 NA 的值。
df <- data.frame(name = rep(letters[1:3], each = 3), foo=rep(1:9),var1 = rep(1:9), var2 = rep(3:5, each = 3))
生成此数据帧:
df
name foo var1 var2
1 a 1 1 3
2 a 2 2 3
3 a 3 3 3
4 b 4 4 4
5 b 5 5 4
6 b 6 6 4
7 c 7 7 5
8 c 8 8 5
9 c 9 9 5
我想将所有出现的 3 和 4 替换为 NA,但仅限于以“var”开头的列中。
我知道我可以使用[] 运算符的组合来达到我想要的结果:
df[,grep("^var[:alnum:]?",colnames(df))][
df[,grep("^var[:alnum:]?",colnames(df))] == 3 |
df[,grep("^var[:alnum:]?",colnames(df))] == 4
] <- NA
df
name foo var1 var2
1 a 1 1 NA
2 a 2 2 NA
3 a 3 NA NA
4 b 4 NA NA
5 b 5 5 NA
6 b 6 6 NA
7 c 7 7 5
8 c 8 8 5
9 c 9 9 5
现在我的问题如下:
- 有没有一种方法可以有效地做到这一点,因为我的实际 数据集大约有 100.000 行,500 个变量中有 400 个开始 用“var”。当我使用时,我的电脑似乎(主观上)很慢 双括号技术。
- 如果出现问题,我将如何解决该问题
而不是 2 个值(3 和 4)被 NA 替换,我有一个很长的
例如,100 个不同值的列表?有没有办法通过
|运算符分隔一系列笨拙的条件来指定多个值?
【问题讨论】:
-
你可以使用
%in%。
标签: r replace dataframe multiple-columns