更新:我有一个数据框“测试”,如下所示:
session_id seller_feedback_score
1 1 282470
2 1 275258
3 1 275258
4 1 275258
5 1 37831
6 1 282470
7 1 26
8 1 138351
9 1 321350
10 1 841
11 1 138351
12 1 17263
13 1 282470
14 1 396900
15 1 282470
16 1 282470
17 1 321350
18 1 321350
19 1 321350
20 1 0
21 1 1596
22 7 282505
23 7 275283
24 7 275283
25 7 275283
26 7 37834
27 7 282505
28 7 26
29 7 138359
30 7 321360
和一个代码(使用 plyr 包),显然应该对每组 session_id 中的“seller_feedback_score”进行排名:
test <- test %>% group_by(session_id) %>%
mutate(seller_feedback_score_rank = dense_rank(-seller_feedback_score))
然而,真正发生的是 R 将整个数据帧排列在一起,而不与组(session_id)相关:
session_id seller_feedback_score seller_feedback_score_rank_2
1 1 282470 5
2 1 275258 7
3 1 275258 7
4 1 275258 7
5 1 37831 11
6 1 282470 5
7 1 26 15
8 1 138351 9
9 1 321350 3
10 1 841 14
11 1 138351 9
12 1 17263 12
13 1 282470 5
14 1 396900 1
15 1 282470 5
16 1 282470 5
17 1 321350 3
18 1 321350 3
19 1 321350 3
20 1 0 16
21 1 1596 13
22 7 282505 4
23 7 275283 6
24 7 275283 6
25 7 275283 6
26 7 37834 10
27 7 282505 4
28 7 26 15
29 7 138359 8
30 7 321360 2
我通过计算唯一的“seller_feedback_score_rank”值来检查这一点,毫不奇怪,它等于最高排名值。如果有人可以重现并提供帮助,我将不胜感激。谢谢
一种选择:
library(dplyr)
df %>% group_by(session_id) %>%
mutate(rank = dense_rank(-seller_feedback_score))
dense_rank
是“像 min_rank,但排名之间没有差距”,所以我否定了 seller_feedback_score 列,以便将其变成类似 max_rank 的内容(dplyr 中不存在)。
如果您想要有差距的排名,以便在您的情况下达到最低的 21,您可以使用min_rank
代替dense_rank
:
library(dplyr)
df %>% group_by(session_id) %>%
mutate(rank = min_rank(-seller_feedback_score))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)