Waarden rangschikken met rank()
Wijs rangen toe met methoden voor gelijke waarden: average, first, min, max en random.
Waarden rangschikken met rank() is een gratis R Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject R Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus R Academy bevat in totaal 4 lessen.
Wat retourneert rank()?
rank(x) retourneert de rangnummers van de waarden in een vector. De kleinste waarde krijgt rang 1, de op één na kleinste rang 2 enzovoort. In tegenstelling tot order() heeft de uitvoer dezelfde lengte als de invoer; elke positie bevat de rang van die waarde.
scores <- c(78, 92, 65, 88, 71)
ranks <- rank(scores)
print(scores)
print(ranks)Gelijke waarden verwerken: methode average
Wanneer waarden gelijk zijn, gebruikt rank() het argument ties.method om te bepalen hoe de rangen worden toegewezen. De standaardwaarde is 'average': gelijke elementen krijgen het gemiddelde van de rangen die ze zouden hebben ingenomen.
x <- c(10, 20, 20, 30)
# Default: average of positions 2 and 3 = 2.5
rank(x)
rank(x, ties.method = 'average')Methode voor gelijke waarden: first en last
ties.method = 'first' wijst de lagere rang toe aan het gelijke element dat het eerst in de vector voorkomt. 'last' doet het tegenovergestelde — het eerdere element krijgt de hogere rang.
x <- c(10, 20, 20, 30)
cat('first:', rank(x, ties.method = 'first'), '\n')
cat('last: ', rank(x, ties.method = 'last'), '\n')Methode voor gelijke waarden: min en max
'min' geeft alle gelijke elementen de laagste rang die ze konden krijgen (zoals bij sport: twee spelers die gelijkstaan op de 3e plaats krijgen allebei rang 3, niemand krijgt rang 4). 'max' geeft alle gelijke elementen de hoogste rang.
x <- c(10, 20, 20, 30)
cat('min:', rank(x, ties.method = 'min'), '\n')
cat('max:', rank(x, ties.method = 'max'), '\n')Methode voor gelijke waarden: random
ties.method = 'random' lost gelijke standen op door willekeurig verschillende rangen toe te wijzen aan gelijke elementen. Elke aanroep kan een ander resultaat opleveren. Dit is handig als je unieke integer-rangen nodig hebt, maar de volgorde waarin gelijke waarden worden onderscheiden niet belangrijk vindt.
x <- c(10, 20, 20, 20, 30)
set.seed(42)
cat('random run 1:', rank(x, ties.method = 'random'), '\n')
set.seed(99)
cat('random run 2:', rank(x, ties.method = 'random'), '\n')Dichte rangschikking versus standaardrangschikking
De rank() van R produceert een standaardrangschikking met gedeelde posities (1, 2, 2, 4). Gebruik voor een dichte rangschikking (1, 2, 2, 3 — zonder tussenliggende rangen) rank(x, ties.method = 'min') op unieke waarden, of gebruik de pakketten data.table of dplyr. Hier is een oplossing met base R:
x <- c(10, 20, 20, 30)
# Standard ranking (gaps after ties)
cat('Standard:', rank(x, ties.method = 'min'), '\n')
# Dense ranking: rank of sorted unique values
dense <- match(x, sort(unique(x)))
cat('Dense: ', dense, '\n')rank() versus order() versus sort()
Deze drie functies houden verband met elkaar, maar retourneren verschillende dingen: sort(x) retourneert gesorteerde waarden, order(x) retourneert posities waarmee de vector wordt gesorteerd en rank(x) retourneert de rang van elke positie. Hier zie je een vergelijking naast elkaar.
x <- c(30, 10, 50, 20, 40)
cat('x :', x, '\n')
cat('sort(x) :', sort(x), '\n')
cat('order(x):', order(x), '\n')
cat('rank(x) :', rank(x), '\n')Rangschikken in aflopende volgorde
Als je van groot naar klein wilt rangschikken (rang 1 = hoogste waarde), ontken je de vector voordat je deze aan rank() doorgeeft. Dit is het patroon voor klassementen waarin rang 1 de beste positie betekent.
scores <- c(78, 92, 65, 88, 71)
desc_ranks <- rank(-scores)
cat('Scores: ', scores, '\n')
cat('Rank (best=1):', desc_ranks, '\n')Rangen toevoegen aan een dataframe
Een veelvoorkomende taak is het toevoegen van een rangkolom aan een dataframe. Gebruik rank() met ties.method = 'min' en ontken de waarden voor een aflopende volgorde, zodat je een correct klassement opbouwt.
df <- data.frame(
player = c('Alice', 'Bob', 'Carol', 'Dave'),
score = c(250, 400, 250, 375)
)
df$rank <- rank(-df$score, ties.method = 'min')
df[order(df$rank), ]rank() met NA-waarden
rank() heeft een na.last-argument, net als sort() en order(). De standaardwaarde is 'keep'. Hiermee krijgt elke NA-waarde de rang NA, terwijl de niet-NA-elementen onderling worden gerangschikt.
x <- c(5, NA, 2, NA, 8, 1)
cat('na.last=keep: ', rank(x, na.last = 'keep'), '\n')
cat('na.last=TRUE: ', rank(x, na.last = TRUE), '\n')
cat('na.last=FALSE: ', rank(x, na.last = FALSE), '\n')Percentielrangen
Converteer rangen naar percentielen door ze te delen door het totale aantal waarden. Een percentielrang geeft aan welk deel van de waarden kleiner dan of gelijk aan een bepaald element is. Dit is nuttig in de statistiek en bij het beoordelen van onderwijsprestaties.
scores <- c(60, 75, 82, 91, 68, 77, 85, 95)
n <- length(scores)
pct_rank <- rank(scores) / n * 100
result <- data.frame(score = scores, percentile = round(pct_rank, 1))
result[order(result$score), ]Korte controle
Welke waarde voor ties.method geeft alle elementen met dezelfde waarde dezelfde laagst mogelijke rang (zoals bij sport, waar twee spelers de 3e plaats delen en niemand de 4e plaats krijgt)?
Belangrijkste punten van rank()
Belangrijkste punten van rank():
rank(x)retourneert de rang van elk element (met dezelfde lengte als de invoer)- Standaard is
ties.method = 'average': elementen met dezelfde waarde delen het gemiddelde van hun rangen 'min'= volgens de sportnotatie (gedeelde laagste rang),'max'= gedeelde hoogste rang'first'en'last'verbreken gelijke standen op basis van de volgorde waarin elementen voorkomen- Gebruik
rank(-x)voor aflopende rangen (rang 1 = grootste waarde) - Voeg rangkolommen toe aan dataframes met
df$rank <- rank(-df$score, ties.method='min')
x <- c(10, 30, 20, 30, 10)
cat('average:', rank(x, ties.method = 'average'), '\n')
cat('min: ', rank(x, ties.method = 'min'), '\n')
cat('max: ', rank(x, ties.method = 'max'), '\n')
cat('first: ', rank(x, ties.method = 'first'), '\n')Leer R met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 43
- Lessen
- 159
Veelgestelde vragen
Is de les “Waarden rangschikken met rank()” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad R Academy, waaronder “Waarden rangschikken met rank()”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus R Academy bevat in totaal 4 lessen.
Wat leer ik in “Waarden rangschikken met rank()”?
Wijs rangen toe met methoden voor gelijke waarden: average, first, min, max en random. Je oefent met R Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met R Academy te beginnen?
Ervaring vooraf is niet nodig. R Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Waarden rangschikken met rank()”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over R Academy?
Ja. Elke les over R Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Vectoren sorteren met sort()
- order() voor flexibele ordening
- Waarden rangschikken met rank()
- Data frames sorteren op kolom