如果两列的值相等,则将结果列的值更改为NA,如果不保持结果列的原始值 – 使用R.

这个问题与前一个问题类似.

我提供此示例数据以解决我的问题.

id=c(1,2,3,4,5,6,7,8,9,10) 
var1=c(0,1,2,0,6,9,0,0,3,0) 
var2=c(0,0,2,3,0,0,0,5,0,0)
var3=c(0,1,4,3,6,9,0,5,3,0) 
data=data.frame(id,var1,var2, var3) 

我需要的是:
如果var1 == var2的值,则使var3 == NA,但如果不是,则保留var3的值.
很高兴使用R中的ifelse函数完成它,但欢迎其他选项.

我希望这个问题足够清楚.

问候,
Bazon

最佳答案 用ifelse注意的一件事是条件是否可以是NA.在您的情况下,使用David的示例代码,如果var1或var2是NA,则var3将设置为NA.

我要么在条件中将NAs设置为F,要么执行以下操作:

var3 <- replace(var3, which(var1 == var2), NA)

相比:

data$var1[1] = NA
with(data, ifelse(var1 == var2, NA, var3))
# [1] NA  1 NA  3  6  9 NA  5  3 NA
with(data, replace(var3, which(var1 == var2), NA))
# [1]  0  1 NA  3  6  9 NA  5  3 NA
点赞