Replace all values in a data.table given a condition

前端 未结 2 882
陌清茗
陌清茗 2020-12-31 15:29

How would you replace all values in a data.table given a condition?

For example

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条回答
  • 2020-12-31 15:43

    A native data.table way to do this would be:

    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
    

    This approach - while perhaps more verbose - is nevertheless going to be significantly faster than ppp[ppp == 6] <- NA, because it avoids the copying of all columns.

    0 讨论(0)
  • 2020-12-31 16:00

    Even easier:

    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
    

    Importantly, this doesn't change its class:

    is.data.table(ppp)
    [1] TRUE
    
    0 讨论(0)
提交回复
热议问题