Een rangschikkingsvariabele maken met dplyr?

Stel dat ik de volgende gegevens heb

df = data.frame(name=c("A", "B", "C", "D"), score = c(10, 10, 9, 8))

Ik wil een nieuwe kolom met de rangorde toevoegen. Dit is wat ik doe:

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

Mijn gewenste resultaat is echter:

#   name score ranking
# 1    A    10       1
# 2    B    10       1
# 3    C     9       2
# 4    D     8       3

Het is duidelijk dat rankniet doet wat ik in gedachten heb. Welke functie moet ik gebruiken?


Antwoord 1, autoriteit 100%

Het klinkt alsof je zoekt naar dense_rankvan “dplyr” — maar toegepast in een omgekeerde volgorde dan wat ranknormaal doet.

Probeer dit:

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

Antwoord 2, autoriteit 9%

Andere oplossing wanneer u de rangorde op alle variabelen moet toepassen (niet op slechts één).

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

Antwoord 3

@user101089 — je kunt het op deze alternatieve manier uitproberen:

df = data.frame(naam = c(“A”,”B”,”C”,”D”),
score=c(10,10,9,8), score2 = c(5,1,9,2))

df %>% muteren(rank_score = dichte_rank(desc(score)),
rank_score2 = dichte_rank(desc(score2)))

Other episodes