<分区>
我有这样一个数据框
df <- expand.grid(0:1, 0:1, 0:1, 0:1)
df
Var1 Var2 Var3 Var4
1 0 0 0 0
2 1 0 0 0
3 0 1 0 0
4 1 1 0 0
5 0 0 1 0
6 1 0 1 0
7 0 1 1 0
8 1 1 1 0
9 0 0 0 1
10 1 0 0 1
11 0 1 0 1
12 1 1 0 1
13 0 0 1 1
14 1 0 1 1
15 0 1 1 1
16 1 1 1 1
我正在尝试根据 Var1、Var2、Var3、Var4
上的某些条件创建一个 Rank
列
排名优先顺序由变量决定
- Var1 列具有最高优先级,如果它的值为 1,则它的排名更高
- 列 Var2 比 Var3、Var4 有更高的偏好
- 列 Var1 和 Var2 比 Var3、Var4 有更高的优先级
- Var3 和Var4 没有偏好,仅用作排名的计数
如果任何行的 Var3、Var4 计数相同,则它们以相同的数字排名。
我的期望输出是
Var1 Var2 Var3 Var4 rank
1 0 0 0 0 12
2 1 0 0 0 6
3 0 1 0 0 9
4 1 1 0 0 3
5 0 0 1 0 11
6 1 0 1 0 5
7 0 1 1 0 8
8 1 1 1 0 2
9 0 0 0 1 11
10 1 0 0 1 5
11 0 1 0 1 8
12 1 1 0 1 2
13 0 0 1 1 10
14 1 0 1 1 4
15 0 1 1 1 7
16 1 1 1 1 1
我正在尝试手动执行此操作,但效率不高
df %>%
mutate(rank = case_when(
Var1 == 1 & Var2 == 1 & Var3 == 1 & Var4 == 1~ "1",
Var1 == 1 & Var2 == 1 & Var3 == 1 & Var4 == 0~ "2",
TRUE ~ ""
))
我想将逻辑应用于更大的数据集。有没有一种有效的方法来做到这一点?有人可以指出我正确的方向吗?