假设我有以下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
任何人都可以帮助我找出我的代码中不正确的地方吗?
谢谢
答案 0 :(得分:3)
我们可以将pmax
与na.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