我试图实现类似于this question但具有必须由NA替换的多个值以及大数据集中的值。R:使用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
我想用NA来替代,比如说,3和4的所有事件,但只有在与“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个不同的值,我将如何处理这个问题?有没有办法指定多个值,而必须执行由
|
运算符分隔的一系列笨拙条件?
你可以使用'%'%。 – Roland 2014-09-10 14:49:15