Vai al contenuto principale

Come ordinare i dati in R: un tutorial completo

Impara a ordinare vettori, data frame e altro in R usando order(), sort() e arrange() di dplyr con esempi pratici.
· 6 min leggi

Scopri con l'IA

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

  • Usa sort() per ordinare direttamente un vettore e ottenere i valori ordinati
  • Usa order() per ottenere gli indici che ordinerebbero un vettore — ideale per ordinare i data frame
  • Usa dplyr::arrange() per un approccio moderno e leggibile all'ordinamento dei data frame
  • Gestisci i valori NA con il parametro na.last (TRUE mette gli NA in fondo, FALSE all'inizio)
  • Ordina in ordine decrescente con decreasing = TRUE o usando il segno meno

order() 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 funzione sort(). Mentre order() restituisce indici, sort() restituisce direttamente i valori ordinati:

# Create a vector
values <- c(4, 12, 6, 7, 2, 9, 5)

# sort() returns the sorted values directly
sort(values)
[1]  2  4  5  6  7  9 12

La differenza chiave è che sort() ti dà i valori effettivamente ordinati, mentre order() ti dà le posizioni. Questo rende order() più utile per ordinare i data frame, come vedremo più avanti.

Sintassi di order()

La sintassi di order() è mostrata qui sotto:

order(x, decreasing = TRUE or FALSE, na.last = TRUE or FALSE, method = c("auto", "shell", "quick", "radix"))

Gli argomenti di order() indicano che:

  • x: data frame, matrici o vettori
  • decreasing: valore booleano; TRUE ordina in ordine decrescente, FALSE ordina in ordine crescente.
  • na.last: valore booleano; TRUE mette gli indici NA alla fine, FALSE li mette all'inizio.
  • method: metodo di ordinamento da utilizzare.

order() in R

Vediamo un esempio di order() in azione.

Il codice seguente crea un vettore y che contiene una lista di numeri. Userò order(y) per ottenere gli indici che ordinerebbero questi numeri.

y <- c(4, 12, 6, 7, 2, 9, 5)
order(y)

Il codice sopra produce il seguente output:

5 1 7 3 4 6 2

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.

y <- c(4, 12, 6, 7, 2, 9, 5)
y[order(y)]

Il codice sopra produce il seguente output:

2 4 5 6 7 9 12

Qui viene applicato l'indicizzamento restituito da order() e vengono stampati i valori effettivi in ordine crescente. I valori sono ordinati secondo l'indice usando order() e poi ogni valore è accessibile usando y[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)

x <- c(8, 2, 4, 1, -4, NA, 46, 8, 9, 5, 3)
order(x, na.last = TRUE)

Il codice sopra produce il seguente output:

5 4 2 11 3 10 1 8 9 7 6

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 di na.last=TRUE.

order(x,na.last=FALSE)

order(x, na.last = FALSE)

Il codice sopra produce il seguente output:

6 5 4 2 11 3 10 1 8 9 7

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 di na.last=FALSE.

order(x,decreasing=TRUE,na.last=TRUE)

order(x, decreasing = TRUE, na.last = TRUE)

Il codice sopra produce il seguente output:

7 9 1 8 10 3 11 2 4 5 6

Qui order() ordina la lista di numeri data in base agli indici in ordine decrescente grazie a decreasing=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 di na.last=TRUE.

order(x,decreasing=FALSE,na.last=FALSE)

order(x, decreasing = FALSE, na.last = FALSE)

Il codice sopra produce il seguente output:

6 5 4 2 11 3 10 1 8 9 7

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.

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
genderagedegree
male40MA
female57BSCS
male66BE
female61BSCS
female48MA
male25MA
female49BE
male52ME
female57MA
female35MA

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),]
 genderagedegree
6male25MA
10female35MA
1male40MA
5female48MA
7female49BE
8male52ME
2female57BSCS
9female57MA
4female61BSCS
3male66BE

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

FunzioneRestituisceIdeale perPacchetto
sort()Valori ordinatiVettoriBase R
order()IndiciData frame, ordinamenti complessiBase R
arrange()Data frame ordinatoWorkflow Tidyversedplyr
setorder()Modifica in placeDataset 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 vettori
  • order() 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.

Argomenti

Correlato