具有嵌套if if else的新列,基于两列,如果只存在于另一列

时间:2017-09-21 16:59:08

标签: r if-statement

我有一个包含两个变量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的变量。

我做错了什么?

2 个答案:

答案 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