Een dataframe sorteren met order()
Laten we een data frame maken met een populatiewaarde van 10. De variabele gender bestaat uit vectorwaarden 'male' en 'female' waarbij 10 steekproefwaarden kunnen worden verkregen met behulp van sample(), terwijl replace = TRUE alleen unieke waarden zal genereren. Evenzo bestaat age uit waarden van 25 tot 75, samen met een degree met mogelijke waarden c("MA," "ME," "BE," "BSCS"), die opnieuw unieke waarden zal genereren.
Taak: Sorteer de gegeven data in oplopende volgorde op basis van de leeftijd van de populatie.
Opmerking: De voorbeelddata kan afwijken wanneer je dit lokaal probeert, omdat elke keer dat je de code draait er een uniek dataframe wordt gemaakt.
population <- 10
gender <- sample(c("male", "female"), population, replace = TRUE)
age <- sample(25:75, population, replace = TRUE)
degree <- sample(c("MA", "ME", "BE", "BSCS"), population, replace = TRUE)
final_data <- data.frame(gender = gender, age = age, degree = degree)
final_data
| gender | age | degree |
|---|---|---|
| male | 40 | MA |
| female | 57 | BSCS |
| male | 66 | BE |
| female | 61 | BSCS |
| female | 48 | MA |
| male | 25 | MA |
| female | 49 | BE |
| male | 52 | ME |
| female | 57 | MA |
| female | 35 | MA |
Bovenstaande code geeft de volgende output, die een nieuw aangemaakt dataframe laat zien.
gender age degree
male 40 MA
female 57 BSCS
male 66 BE
female 61 BSCS
female 48 MA
male 25 MA
female 49 BE
male 52 ME
female 57 MA
female 35 MA
Laten we het dataframe in oplopende volgorde sorteren met order() op basis van de variabele age.
order(final_data$age)
Bovenstaande code geeft de volgende output:
6 10 3 9 5 8 4 2 7 1
Aangezien leeftijd 25 op index 6 staat, gevolgd door leeftijd 35 op index 10, worden alle leeftijdswaarden op deze manier oplopend gerangschikt.
De code hieronder gebruikt [] met de volgorde op de variabele age om oplopend te rangschikken, waarbij ook de informatie over gender en degree wordt afgedrukt.
final.data[order(final.data$age),]
| gender | age | degree | |
|---|---|---|---|
| 6 | male | 25 | MA |
| 10 | female | 35 | MA |
| 1 | male | 40 | MA |
| 5 | female | 48 | MA |
| 7 | female | 49 | BE |
| 8 | male | 52 | ME |
| 2 | female | 57 | BSCS |
| 9 | female | 57 | MA |
| 4 | female | 61 | BSCS |
| 3 | male | 66 | BE |
Bovenstaande code geeft de volgende output:
gender age degree
6 male 25 MA
10 female 35 MA
1 male 40 MA
5 female 48 MA
7 female 49 BE
8 male 52 ME
2 female 57 BSCS
9 female 57 MA
4 female 61 BSCS
3 male 66 BE
De output hierboven laat zien dat age oplopend is gerangschikt, met de bijbehorende gender- en degree-informatie.
Sorteren met dplyr's arrange()
Voor een leesbaardere en moderne aanpak kun je de functie arrange() uit het dplyr-pakket gebruiken. Dit is vooral handig binnen het tidyverse-ecosysteem:
# Install dplyr if needed: install.packages("dplyr")
library(dplyr)
# Sort by age in ascending order
final_data %>% arrange(age)
# Sort by age in descending order
final_data %>% arrange(desc(age))
# Sort by multiple columns
final_data %>% arrange(gender, desc(age))
De functie arrange() heeft vaak de voorkeur in data-analyseworkflows omdat deze naadloos integreert met andere dplyr-functies zoals filter(), select() en mutate() met behulp van de pipe-operator.
Vergelijking van sorteermethoden
| Function | Returns | Best For | Package |
|---|---|---|---|
sort() | Gesorteerde waarden | Vectors | Base R |
order() | Indexen | Data frames, complexe sorteringen | Base R |
arrange() | Gesorteerd data frame | Tidyverse-workflows | dplyr |
setorder() | Wijzigt in-place | Grote datasets (geheugenefficiënt) | data.table |
Conclusie
In deze tutorial heb ik de essentiële methoden voor het sorteren van data in R behandeld:
sort()voor het direct sorteren van vectorsorder()voor het krijgen van indexen om vectors en data frames te sorteren- Omgaan met NA-waarden met de parameter
na.last dplyr::arrange()voor moderne, leesbare sortering van data frames- Sorteren op meerdere kolommen voor complexe ordeningsvereisten
Voor meer informatie, zie de officiële R-documentatie voor order().
Wil je meer leren over R? Volg dan DataCamps Introduction to R-cursus. Je kunt ook onze data.table-tutorial verkennen voor high-performance datamanipulatie, of onze gids over pipes in R bekijken voor schonere code.

R biedt verschillende manieren om data te sorteren in oplopende of aflopende volgorde; data-analisten en data scientists gebruiken
order(),sort()en pakketten zoals dplyr om te sorteren afhankelijk van de structuur van de data.TL;DR
sort()om een vector direct te sorteren en de gesorteerde waarden terug te krijgenorder()om de indexen te krijgen die een vector zouden sorteren—ideaal voor het sorteren van data framesdplyr::arrange()voor een moderne, leesbare aanpak om data frames te sorterenna.last(TRUE zet NA’s achteraan, FALSE vooraan)decreasing = TRUEof door een minteken te gebruikenorder()kan vectors en matrices sorteren, en ook een data frame kan met behulp hiervan in oplopende en aflopende volgorde gesorteerd worden, zoals te zien is in de laatste sectie van deze tutorial.Syntax of
order()The
sort()functionVoordat we in
order()duiken, kijken we naar de eenvoudigere functiesort(). Terwijlorder()indexen teruggeeft, geeftsort()direct de gesorteerde waarden terug:Het belangrijkste verschil is dat
sort()je de daadwerkelijke gesorteerde waarden geeft, terwijlorder()de posities teruggeeft. Daardoor isorder()handiger voor het sorteren van data frames, zoals we later zullen zien.Syntax of
order()De syntax van
order()staat hieronder:De argumenten van
order()betekenen het volgende:order()in RLaten we een voorbeeld bekijken van
order()in actie.De code hieronder maakt een vector
ymet een lijst getallen. Ik gebruikorder(y)om de indexen te krijgen die deze getallen zouden sorteren.Bovenstaande code geeft de volgende output:
Hier sorteert
order()de gegeven getallen op basis van hun index in oplopende volgorde. Omdat 2 het kleinst is, met index vijf, en 4 index 1 heeft, gaat het proces op dezelfde manier verder.Bovenstaande code geeft de volgende output:
Hier wordt geïndexeerd met de volgorde zodat de werkelijke waarden in oplopende volgorde worden afgedrukt. De waarden worden geordend volgens de index met
order()en daarna wordt elke waarde benaderd mety[some-value].Een vector sorteren met verschillende parameters in
order()Laten we een voorbeeld bekijken waarin de datasets de waarde als symbool NA (Not available) bevatten.
order(x,na.last=TRUE)
Bovenstaande code geeft de volgende output:
Hier zal
order()ook de gegeven lijst met getallen sorteren op basis van hun index in oplopende volgorde. Omdat NA aanwezig is, wordt de index daarvan als laatste geplaatst; 6 komt dus achteraan vanwegena.last=TRUE.order(x,na.last=FALSE)Bovenstaande code geeft de volgende output:
Hier zal
order()ook de gegeven lijst met getallen sorteren op basis van hun index in oplopende volgorde. Omdat NA aanwezig is, wordt de index daarvan, 6, als eerste geplaatst vanwegena.last=FALSE.order(x,decreasing=TRUE,na.last=TRUE)
Bovenstaande code geeft de volgende output:
Hier sorteert
order()de lijst met getallen op basis van hun index in aflopende volgorde vanwegedecreasing=TRUE: 46, de grootste, staat op index 7 en de andere waarden worden in aflopende volgorde gerangschikt. Omdat NA aanwezig is, wordt index 6 als laatste geplaatst vanwegena.last=TRUE.order(x,decreasing=FALSE,na.last=FALSE)
Bovenstaande code geeft de volgende output:
Hier is NA aanwezig, waarvan de index 6 als eerste wordt geplaatst vanwege
na.last=FALSE.order()zal de lijst met getallen sorteren op basis van hun index in oplopende volgorde vanwegedecreasing=FALSE: -4, de kleinste, staat op index 5 en de overige waarden worden oplopend gerangschikt.