次のデータがあるとします
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
は私が考えていることをしません。どの機能を使用する必要がありますか?
「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
ランクをすべての変数(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(.))))