R:ifelse中的na

时间:2018-08-15 09:57:55

标签: r if-statement

我用以下代码创建了变量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语句中的布尔推理应该是正确的。有人可以给我一个提示吗?谢谢。

2 个答案:

答案 0 :(得分:1)

您需要指定如果aNA时会发生什么。像下面一样添加(!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