我有一个包含两个变量var1和var2的数据集。有些情况下var1中有一个值,var2中有一些值。值为var1的个案在var2中为NA,反之亦然。我想将这些变量组合成一个值为1或0的变量。如果var1或var2的值为1,则新变量的值应为1,如果var1或var2的值为0,则值为0仅当var1和var2都是NA时才使用NA。
基本上,我要做的是让R在var1或var2中忽略NA,如果在另一个中有值,并且在BOTH变量中只有返回NA为NA。
我尝试了以下解决方案:
首次尝试:
df$new_var<-ifelse(df$var1==1|df$var2==1,1,
ifelse(df$var1<1|df$var2<1,0,
ifelse(is.na(df$var1)&df$var2<1,0,0
ifelse(is.na(df$var2)&df$var1<1,0,0))))
第二次尝试:
df$new_var<-ifelse(df$var1==1|df$var2==1,1,
ifelse(df$var1==0|df$var2==0,0,NA))
第三次尝试:
df$new_var<-ifelse(df$var1==1|df$var2==1,1,
ifelse(df$var1==0|df$var2==0,0,NA))
All返回一个带1和N且不为0的变量。
我做错了什么?
答案 0 :(得分:0)
我知道这样做的最简单方法是使用dplyr::coalesce
:
dplyr::coalesce(c(1,0,0,NA), c(1, NA, 1, 1))
#> [1] 1 0 0 1
如果有人为你做了这个,为什么还要写表达呢? ;)
答案 1 :(得分:0)
使用pmax
df <- expand.grid(c(1, 0, NA), c(1, 0, NA))
df$new_var <- pmax(df$Var1, df$Var2, na.rm = TRUE)
> df
Var1 Var2 new_var
1 1 1 1
2 0 1 1
3 NA 1 1
4 1 0 1
5 0 0 0
6 NA 0 0
7 1 NA 1
8 0 NA 0
9 NA NA NA