用NA

时间:2018-03-28 17:04:56

标签: r dplyr

我有两个变量,分数从1-6开始。我想确定个体在变量1上回答3而在变量2上回答3并将其更改为NA的情况。

help <- data.frame(id   = c(100, 100, 100, 110, 110, 110, 120, 120, 120, 130, 130, 130),
                   var1 = c(1, 3, 6, 3, 4, 3, 1, 2, 3, 3, 5, 6),
                   var2 = c(5, 3, 6, 3, 4, 3, 5, 6, 6, 3, 5, 4))

我希望最终结果如下:

    id var1 var2
   100    1    5
   100    NA   NA
   100    6    6
   110    NA   NA
   110    4    4
   110    NA    NA
   120    1    5
   120    2    6
   120    3    6
   130    NA   NA
   130    5    5
   130    6    4

我已经尝试过data.table和match()命令,但无济于事。任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:5)

您可以使用以下内容在基本R中执行简单的子集和赋值:

help[help$var1 == 3 & help$var2 == 3, c("var1","var2")] <- NA

help
#    id var1 var2
#1  100    1    5
#2  100   NA   NA
#3  100    6    6
#4  110   NA   NA
#5  110    4    4
#6  110   NA   NA
#7  120    1    5
#8  120    2    6
#9  120    3    6
#10 130   NA   NA
#11 130    5    5
#12 130    6    4

如果您有NA s,则可以执行类似的逻辑,只需将NA替换为子集:

ind <- help$var1 == 3 & help$var2 == 3
help[replace(ind, is.na(ind), FALSE), c("var1","var2")] <- NA