用dplyr创建一个排名变量?

laawzig2  于 2023-06-19  发布在  其他
关注(0)|答案(3)|浏览(91)

假设我有以下数据

df = data.frame(name=c("A", "B", "C", "D"), score = c(10, 10, 9, 8))

我想添加一个新的列与排名。这就是我正在做的

df %>% mutate(ranking = rank(score, ties.method = 'first'))
#   name score ranking
# 1    A    10       3
# 2    B    10       4
# 3    C     9       2
# 4    D     8       1

然而,我想要的结果是:

#   name score ranking
# 1    A    10       1
# 2    B    10       1
# 3    C     9       2
# 4    D     8       3

显然,rank并没有做我想做的事情。我应该使用什么功能?

0ejtzxu1

0ejtzxu11#

这听起来像是从“dplyr”中查找dense_rank--但应用顺序与rank的正常顺序相反。
试试这个:

df %>% mutate(rank = dense_rank(desc(score)))
#   name score rank
# 1    A    10    1
# 2    B    10    1
# 3    C     9    2
# 4    D     8    3
nnsrf1az

nnsrf1az2#

当你需要将排名应用到所有变量(而不仅仅是一个)时,其他解决方案。

df = data.frame(name = c("A","B","C","D"),
                score=c(10,10,9,8), score2 = c(5,1,9,2))

select(df, -name) %>% mutate_all(funs(dense_rank(desc(.))))
5vf7fwbs

5vf7fwbs3#

@user101089 ---你可以用这个替代方法试试:

df = data.frame(name = c("A","B","C","D"),
                score=c(10,10,9,8), score2 = c(5,1,9,2))

df %>% mutate(rank_score = dense_rank(desc(score)), 
                  rank_score2 = dense_rank(desc(score2)))

相关问题