1

我有这个由三个变量组成的数据框: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

任何简单的解决方案来获得这个?

提前致谢!

4

3 回答 3

3

您可以在列上应用一个简单的数学,例如,

df$c <- df[,2] *2 + df[,3]
于 2021-12-22T13:03:50.000 回答
1

尝试嵌套ifelse

df$c <- ifelse(df$wwb == 1, 2, ifelse(df$ub_bene == 1, 1, 0))
于 2021-12-22T12:53:00.767 回答
0

计算 cumsums 的总和,使用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
于 2021-12-22T13:26:44.223 回答