在给定条件的情况下替换data.table中的所有值

ska*_*kan 8 r data.table

在给定条件的情况下,如何替换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
Run Code Online (Sandbox Code Playgroud)

我想用NA替换所有"6"

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
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的东西

ppp[,ifelse(.SD==6,NA,.SD)]
Run Code Online (Sandbox Code Playgroud)

但它不起作用,它会产生更宽的表格.

mto*_*oto 17

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
Run Code Online (Sandbox Code Playgroud)

这种方法 - 虽然可能更冗长 - 然而要快得多ppp[ppp == 6] <- NA,因为它避免了复制所有列.

  • 有必要遍历各列。 (2认同)

lmo*_*lmo 12

更简单:

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
Run Code Online (Sandbox Code Playgroud)

重要的是,这不会改变它的类:

is.data.table(ppp)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

  • 还有`is.na(ppp)< - ppp == 6` (3认同)