web-dev-qa-db-ja.com

dplyrでランキング変数を作成しますか?

次のデータがあるとします

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は私が考えていることをしません。どの機能を使用する必要がありますか?

39
Ignacio

「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
59

ランクをすべての変数(1つだけではない)に適用する必要がある場合のその他のソリューション。

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(.))))
6
pablo_sci