我試圖實現類似於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