Создать переменную рейтинга с 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
не делает то, что я имею в виду. Какую функцию я должен использовать?
Ответы
Ответ 1
Похоже, что вы ищете 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
Ответ 2
Другое решение, когда вам нужно применить ранг ко всем переменным (а не только к одной).
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(.))))