Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 用NA替换两个匹配的值_R_Dplyr - Fatal编程技术网

R 用NA替换两个匹配的值

R 用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,

我有两个变量,评分范围为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))

我尝试了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