根据逻辑标准将变量转化为一个

Turning to variables into one based on logical criteria

我有这个由三个变量组成的数据框:id, wwb and ub_bene

       id   wwb ub_bene    
    <dbl> <dbl>   <dbl>
 1 800009     0       0
 2 800009     0       1
 3 800009     1       0
 4 800009     1       0
 5 800009     0       0
 6 800015     0       0
 7 800015     0       1
 8 800015     0       0
 9 800015     1       0
10 800015     0       1
11 800033    NA      NA
12 800033    NA      NA
13 800042     0       0
14 800042     0       1
15 800042    NA      NA    

不过。我正在寻找将这些变量合二为一的方法,以便:

如果wwb = 1,则C列为2,如果ub_bene = 1,则C列为1,否则为0。

这是我想要获得的:

       id   wwb ub_bene  c
    <dbl> <dbl>   <dbl> <dbl> 
 1 800009     0       0   0
 2 800009     0       1   1
 3 800009     1       0   2
 4 800009     1       0   2
 5 800009     0       0   0  
 6 800015     0       0   0
 7 800015     0       1   1
 8 800015     0       0   0
 9 800015     1       0   2
10 800015     0       1   1
11 800033    NA      NA   NA
12 800033    NA      NA   NA
13 800042     0       0   0
14 800042     0       1   1
15 800042    NA      NA   NA

有什么简单的解决方案吗?

提前致谢!

尝试嵌套 ifelse:

df$c <- ifelse(df$wwb == 1, 2, ifelse(df$ub_bene == 1, 1, 0))

您可以只对列应用简单的数学运算,例如,

df$c <- df[,2] *2 + df[,3]

正在计算 cumsum 的总和,使用 matrixStats

matrixStats::rowSums2(matrixStats::rowCumsums(dat[2:3] == 1))
# [1]  0  1  2  2  0  0  1  0  2  1 NA NA  0  1 NA