Подтвердить что ты не робот

Создать переменную рейтинга с 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 не делает то, что я имею в виду. Какую функцию я должен использовать?

4b9b3361

Ответ 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(.))))