【发布时间】:2020-07-09 17:28:45
【问题描述】:
我有一个这样的数据框
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 ~ ""
))
我想将逻辑应用于更大的数据集。有没有一种有效的方法来做到这一点?有人能指出我正确的方向吗?
【问题讨论】:
标签: r dplyr data.table ranking rank