如果否则在R中缺少观测值

时间:2019-04-16 18:54:48

标签: r if-statement missing-data

假设我有以下2个变量

z1=c(0,1,1,0,NA,1,0,NA ,1)
z2=c(0,1,0,NA,1,0,0,0,NA)

因此,两个变量都缺少值。我需要如下创建一个新的变量Z,

如果变量(z1和z2)中的至少一个等于1,则

Z = 1(以下情况z1 = 1&z2 = 1,z1 = 0&z2 = 1,z1 = 1&z2 = 0, z1 = 1&z2 = NA,z1 = NA&z2 = 1)

如果至少一个变量(z1和z2)等于0,则

Z = 0(以下情况z1 = 0&z2 = 0,z1 = 0&z2 = NA,z1 = NA&z2 = 0)

所以我执行了以下嵌套的ifelse语句并获得了此输出,

     ifelse(z1==1|z2==1,1,ifelse((z1==0|z2==0),0 ,0))
  0  1  1 NA  1  1  0 NA  1

if-else语句似乎有问题,因为我的理想输出应该是这样,

0  1  1 0  1  1  0 0  1

任何人都可以帮助我找出我的代码中不正确的地方吗?

谢谢

2 个答案:

答案 0 :(得分:3)

我们可以将pmaxna.rm一起使用TRUE

pmax(z1, z2, na.rm = TRUE)
#[1] 0 1 1 0 1 1 0 0 1

答案 1 :(得分:1)

我相信coalesce()软件包中的dplyr完成了您想要的输出:

library(dplyr)

coalesce(z1, z2)
[1] 0 1 1 0 1 1 0 0 1

如果您希望将新值附加到以前的值:

df <- tibble(
  z1 = c(0, 1, 1, 0, NA, 1, 0, NA, 1),
  z2 = c(0, 1, 0, NA, 1, 0, 0, 0, NA)
)

df %>% 
  mutate(z3 = coalesce(z1, z2))

# A tibble: 9 x 3
     z1    z2    z3
  <dbl> <dbl> <dbl>
1     0     0     0
2     1     1     1
3     1     0     1
4     0    NA     0
5    NA     1     1
6     1     0     1
7     0     0     0
8    NA     0     0
9     1    NA     1