在下面的代码中,我不明白为什么第二个ifelse()
不被评估。有人可以解释吗?如何重写该ifelse
语句?
在y1==1
与y2==1
最后一排匹配,列结果应该充满1
。
df <- data.frame(x1=c(0,0,NA,NA,NA),y1=c(NA,NA,NA,NA,1),x2=c(0,NA,NA,0,NA),
y2=c(1,NA,NA,NA,1))
df$result <- with(df, ifelse((x1==0 & x2==0), 0, ifelse((y1==1 & y2==1), 1, 100)))
试试这个:
df$result <- with(df, ifelse((x1==0 & x2==0) & !is.na(x1==0 & x2==0), 0,
ifelse((y1==1 & y2==1), 1, 100)))
结果:
> df
x1 y1 x2 y2 result
1 0 NA 0 1 0
2 0 NA NA NA NA
3 NA NA NA NA NA
4 NA NA 0 NA NA
5 NA 1 NA 1 1
解决方案使用apply()
和if()
如果要使用if()
和apply()
而不是ifelse()
:
df$result = apply(df,1,function(x){
if(is.na(x["x1"]==0 & x["x2"]==0) & is.na(x["y1"]==1 & x["y2"]==1)){
return(NA)
}
if(!is.na(x["x1"]==0 & x["x2"]==0) & (x["x1"]==0 & x["x2"]==0)){
return(0)
}else if(!is.na(x["y1"]==1 & x["y2"]==1) & (x["y1"]==1 & x["y2"]==1)){
return(1)
}else{
return(100)
}
})
结果与上面相同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句