使用dplyr创建排名变量?

Ign*_*cio 41 r dplyr

假设我有以下数据

df = data.frame(name=c("A", "B", "C", "D"), score = c(10, 10, 9, 8))
Run Code Online (Sandbox Code Playgroud)

我想在排名中添加一个新列.这就是我正在做的事情:

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
Run Code Online (Sandbox Code Playgroud)

但是,我想要的结果是:

#   name score ranking
# 1    A    10       1
# 2    B    10       1
# 3    C     9       2
# 4    D     8       3
Run Code Online (Sandbox Code Playgroud)

显然rank没有做我的想法.我应该使用什么功能?

A5C*_*2T1 62

听起来你正在寻找dense_rank"dplyr" - 但是应用的顺序与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
Run Code Online (Sandbox Code Playgroud)

  • Prbly想要使用`desc(得分)`,即使`-score`也适用.哈德利曾经说过我. (7认同)
  • @Ignacio而不是使用`dense_rank`使用`min_rank` (7认同)
  • C的排名可以是3,D的排名可以吗? (2认同)

pab*_*sci 6

需要将等级应用于所有变量(而不只是一个)的其他解决方案。

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(.))))
Run Code Online (Sandbox Code Playgroud)