我有两个变量,分数从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()命令,但无济于事。任何帮助表示赞赏。谢谢。
答案 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