Ordinare un data frame usando order()
Creiamo un data frame con valore di popolazione pari a 10. La variabile gender è composta dai valori del vettore 'male' e 'female' da cui si possono ottenere 10 valori di esempio con sample(), mentre replace = TRUE genererà solo valori univoci. Allo stesso modo, age contiene valori da 25 a 75, insieme a degree con possibili valori c("MA," "ME," "BE," "BSCS"), che di nuovo genererà valori univoci.
Obiettivo: ordinare i dati in ordine crescente in base all'età della popolazione data.
Nota: i dati di esempio mostrati possono differire quando proverai a usarli in locale, perché ogni esecuzione del codice crea un data frame univoco.
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 |
Il codice sopra produce il seguente output, che mostra un data frame appena creato.
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
Ordiniamo il data frame in ordine crescente usando order() in base alla variabile age.
order(final_data$age)
Il codice sopra produce il seguente output:
6 10 3 9 5 8 4 2 7 1
Poiché l'età 25 è all'indice 6 seguita da 35 all'indice 10, e così via, tutti i valori di età sono disposti in ordine crescente.
Il codice seguente utilizza l'ordinamento con [] sulla variabile age per disporre in ordine crescente, stampando anche le informazioni su gender e degree.
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 |
Il codice sopra produce il seguente 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
L'output sopra mostra che l'età è disposta in ordine crescente insieme alle corrispondenti informazioni su gender e degree.
Ordinamento con arrange() di dplyr
Per un approccio più leggibile e moderno, puoi usare la funzione arrange() del pacchetto dplyr. È particolarmente utile quando lavori nell'ecosistema tidyverse:
# 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))
La funzione arrange() è spesso preferita nei flussi di lavoro di analisi dei dati perché si integra senza problemi con altre funzioni di dplyr come filter(), select() e mutate() usando il pipe operator.
Confronto dei metodi di ordinamento
| Funzione | Restituisce | Ideale per | Pacchetto |
|---|---|---|---|
sort() | Valori ordinati | Vettori | Base R |
order() | Indici | Data frame, ordinamenti complessi | Base R |
arrange() | Data frame ordinato | Workflow Tidyverse | dplyr |
setorder() | Modifica in place | Dataset di grandi dimensioni (efficiente in memoria) | data.table |
Conclusione
In questo tutorial ho coperto i metodi essenziali per ordinare i dati in R:
sort()per ordinare direttamente i vettoriorder()per ottenere gli indici con cui ordinare vettori e data frame- Gestione dei valori NA con il parametro
na.last dplyr::arrange()per un ordinamento dei data frame moderno e leggibile- Ordinamento su più colonne per esigenze di ordinamento complesse
Per maggiori informazioni, consulta la documentazione ufficiale di R per order().
Se vuoi saperne di più su R, segui il corso Introduction to R di DataCamp. Puoi anche esplorare il nostro tutorial su data.table per una manipolazione dei dati ad alte prestazioni o consultare la nostra guida sulle pipe in R per un codice più pulito.


R offre diversi modi per ordinare i dati in ordine crescente o decrescente; data analyst e data scientist usano
order(),sort()e pacchetti come dplyr per ordinare i dati a seconda della loro struttura.TL;DR
sort()per ordinare direttamente un vettore e ottenere i valori ordinatiorder()per ottenere gli indici che ordinerebbero un vettore — ideale per ordinare i data framedplyr::arrange()per un approccio moderno e leggibile all'ordinamento dei data framena.last(TRUE mette gli NA in fondo, FALSE all'inizio)decreasing = TRUEo usando il segno menoorder()può ordinare vettori, matrici e anche un data frame in ordine crescente e decrescente, come mostrato nella sezione finale di questo tutorial.Sintassi di
order()La funzione
sort()Prima di entrare in
order(), vediamo la più semplice funzionesort(). Mentreorder()restituisce indici,sort()restituisce direttamente i valori ordinati:La differenza chiave è che
sort()ti dà i valori effettivamente ordinati, mentreorder()ti dà le posizioni. Questo rendeorder()più utile per ordinare i data frame, come vedremo più avanti.Sintassi di
order()La sintassi di
order()è mostrata qui sotto:Gli argomenti di
order()indicano che:order()in RVediamo un esempio di
order()in azione.Il codice seguente crea un vettore
yche contiene una lista di numeri. Useròorder(y)per ottenere gli indici che ordinerebbero questi numeri.Il codice sopra produce il seguente output:
Qui
order()ordina i numeri dati in base ai loro indici in ordine crescente. Poiché il numero 2 è il più piccolo, ha indice cinque, e il numero 4 ha indice 1; allo stesso modo, il processo prosegue con lo stesso schema.Il codice sopra produce il seguente output:
Qui viene applicato l'indicizzamento restituito da
order()e vengono stampati i valori effettivi in ordine crescente. I valori sono ordinati secondo l'indice usandoorder()e poi ogni valore è accessibile usandoy[valore].Ordinare un vettore usando diversi parametri in
order()Vediamo un esempio in cui il dataset contiene il valore come simbolo NA (Not available).
order(x,na.last=TRUE)
Il codice sopra produce il seguente output:
Qui
order()ordina anche la lista di numeri data in base agli indici in ordine crescente. Poiché è presente NA, il suo indice verrà messo in fondo: l'indice 6 sarà in ultima posizione a causa dina.last=TRUE.order(x,na.last=FALSE)Il codice sopra produce il seguente output:
Qui
order()ordina anche la lista di numeri data in base agli indici in ordine crescente. Poiché è presente NA, il suo indice, che è 6, verrà messo all'inizio a causa dina.last=FALSE.order(x,decreasing=TRUE,na.last=TRUE)
Il codice sopra produce il seguente output:
Qui
order()ordina la lista di numeri data in base agli indici in ordine decrescente grazie adecreasing=TRUE: 46, il più grande, è in posizione con indice 7, e gli altri valori sono disposti in modo decrescente. Poiché è presente NA, l'indice 6 sarà messo in fondo a causa dina.last=TRUE.order(x,decreasing=FALSE,na.last=FALSE)
Il codice sopra produce il seguente output:
Qui è presente NA il cui indice è 6, e verrà messo all'inizio a causa di
na.last=FALSE.order()ordina la lista di numeri data in base agli indici in ordine crescente poichédecreasing=FALSE: -4, il più piccolo, è in posizione con indice 5 e gli altri valori sono disposti in modo crescente.