假设我有以下数据
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)
需要将等级应用于所有变量(而不只是一个)的其他解决方案。
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)