R 用NA替换两个匹配的值
我有两个变量,评分范围为1-6。我想确定个人回答变量1上的3和变量2上的3的情况,并将其更改为NAR 用NA替换两个匹配的值,r,dplyr,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,
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))
我尝试了data.table和match()命令,但没有成功。感谢您的帮助。多谢各位 您可以使用以下工具在基本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
我尝试了data.table和match()命令,但没有成功:
library(data.table);setDT(help)[(var1==var2)和(var1==3L),c(“var1”,“var2”):=NA_integer.
基本R中的简单赋值:help[help$var1==3&help$var2==3,c(“var1”,“var2”)]我有这个,但没有包括c(“var1”,“var2”)
。。。谢谢。快速跟进。。。如果这些变量中缺少任何值,我将在[是的,这很完美。你能解释一下这里的步骤吗?看起来,ind
是一个真/假和NA值的列表,然后你通过replace命令运行它,并用NA只替换真实例。对吗?@bpace,是的,我就是这么做的。我将ind
是NA
的所有实例替换为FALSE
不幸的是,我不认为有任何操作符类似于=
,但它返回TRUE
或FALSE
,这就是为什么我使用replace
@MikeH的原因。你最后的评论是c(NA,1,2)%2中的%2
虽然它并不总是一个好的替代品。我想,David的data.table方法在不调整NA的情况下也会起作用,因为DT[logi,j]
会过滤掉logi中的NAs。
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
ind <- help$var1 == 3 & help$var2 == 3
help[replace(ind, is.na(ind), FALSE), c("var1","var2")] <- NA