4

这个问题与上一个问题类似。

我提供这个示例数据来解决我的问题。

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,则 makevar3==NA但如果不是,则保留var3. 很高兴使用ifelseR 中的函数完成它,但欢迎使用其他选项。

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

问候,巴宗

4

2 回答 2

1

只要两个向量中没有 NA,这应该可以工作:

var3 <- ifelse(var1 == var2, NA, var3)
于 2010-09-24T01:25:07.540 回答
1

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
于 2010-09-24T02:37:17.403 回答