我用以下代码创建了变量np_collpar
a <- c(NA,NA,NA,1,1,1)
c1 <- c(9,3,NA,NA,NA,5)
c2 <- c(5,NA,NA,NA,5,2)
c3 <- c(3,7,NA,NA,NA,9)
df <- data.frame(a,c1,c2,c3)
np_collpar <- ifelse(a==1 & (!is.na(c1) | !is.na(c2) | !is.na(c3)),1,0)
我希望第5和第6行的np_collpar为1,第1-4行的np_collpar为0。但是,对于第1行和第2行,将返回NA。ifelse语句中的布尔推理应该是正确的。有人可以给我一个提示吗?谢谢。
答案 0 :(得分:1)
您需要指定如果a
为NA
时会发生什么。像下面一样添加(!is.na(a))
。
> np_collpar <- ifelse(a==1 & (!is.na(a)) & (!is.na(c1) | !is.na(c2) | !is.na(c3)),1,0)
> np_collpar
[1] 0 0 0 0 1 1
答案 1 :(得分:0)
使用complete.cases()
的其他选项,如果向量具有FALSE
,则返回NA
,否则返回TRUE
。
np_collpar <- ifelse(a==1 & (complete.cases(a)) & (complete.cases(c1) | complete.cases(c2) | complete.cases(c3)), 1, 0)
np_collpar
[1] 0 0 0 0 1 1