根据逻辑标准将变量转化为一个
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
我有这个由三个变量组成的数据框: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