在给定条件的情况下,如何替换data.table中的所有值?
例如
ppp <- data.table(A=1:6,B=6:1,C=1:6,D=3:8)
A B C D
1 6 1 3
2 5 2 4
3 4 3 5
4 3 4 6
5 2 5 7
6 1 6 8
我想替换所有&#34; 6&#34;由NA
A B C D
1 NA 1 3
2 5 2 4
3 4 3 5
4 3 4 NA
5 2 5 7
NA 1 6 8
我尝试过像
这样的事情ppp[,ifelse(.SD==6,NA,.SD)]
但它不起作用,它会产生更宽的表格。
答案 0 :(得分:15)
本地data.table
方法是:
for(col in names(ppp)) set(ppp, i=which(ppp[[col]]==6), j=col, value=NA)
# Test
> ppp
A B C D
1: 1 NA 1 3
2: 2 5 2 4
3: 3 4 3 5
4: 4 3 4 NA
5: 5 2 5 7
6: NA 1 NA 8
这种方法 - 尽管可能更冗长 - 但仍然明显快于ppp[ppp == 6] <- NA
,因为它避免了复制所有列。
答案 1 :(得分:11)
更容易:
ppp[ppp == 6] <- NA
ppp
A B C D
1: 1 NA 1 3
2: 2 5 2 4
3: 3 4 3 5
4: 4 3 4 NA
5: 5 2 5 7
6: NA 1 NA 8
重要的是,这并没有改变它的类:
is.data.table(ppp)
[1] TRUE