La guida completa: come utilizzare sort(), order() e rank() in r
Tre funzioni di R che le persone spesso confondono sono l’ordinamento , l’ordinamento e il posizionamento .
Ecco la differenza tra queste funzioni:
- sort() ordinerà un vettore in ordine crescente
- order() restituirà l’indice di ciascun elemento di un vettore in ordine ordinato
- Rank() assegnerà un rango a ciascun elemento di un vettore (il più piccolo = 1)
L’esempio seguente mostra come utilizzare nella pratica ciascuna di queste funzioni.
Esempio: utilizzare sort(), order() e Rank() con i vettori
Il codice seguente mostra come utilizzare le funzioni sort() , order() e Rank() con un vettore a quattro valori:
#createvector
x <- c(0, 20, 10, 15)
#sort vector
sort(s)
[1] 0 10 15 20
#order vector
order(s)
[1] 1 3 4 2
#rank vector
rank(x)
[1] 1 4 2 3
Ecco cosa ha fatto ciascuna funzione:
1. La funzione sort() ha semplicemente ordinato i valori del vettore in ordine crescente.
2. La funzione order() ha restituito l’indice di ciascun elemento in ordine ordinato.
- Se metti in ordine i valori del vettore originale in base a questi valori di indice, otterrai un vettore ordinato.
- Ad esempio, order() ci dice di inserire prima il valore nella posizione dell’indice 1 : è 0 nel vettore originale.
- Quindi order() ci dice di inserire il valore nella posizione dell’indice 3 – ovvero 10 nel vettore originale.
- Quindi order() ci dice di inserire il valore nella posizione dell’indice 4 – ovvero 15 nel vettore originale.
- Quindi order() ci dice di inserire il valore nella posizione dell’indice 2 – ovvero 20 nel vettore originale.
- Il risultato finale è un vettore ordinato: 0, 10, 15, 20.
3. La funzione Rank() ha assegnato un rango a ciascun elemento del vettore, utilizzando 1 per il valore più piccolo.
- Ad esempio, Rank() ci dice che il primo valore del vettore originale è il più piccolo (rango = 1) e che il secondo valore del vettore originale è il più grande (rango = 4).
Nota che possiamo usare la seguente sintassi per usare sort() , order() e rango() in ordine inverso:
#createvector
x <- c(0, 20, 10, 15)
#sort vector in decreasing order
sort(x, decreasing= TRUE )
[1] 20 15 10 0
#order vector in decreasing order
order(x, decreasing= TRUE )
[1] 2 4 3 1
#rank vector in reverse order (largest value = 1)
rank(-x)
[1] 4 1 3 2
Si noti che questi risultati sono esattamente l’opposto di quelli prodotti negli esempi precedenti.
Nota: come gestire i legami con la funzione Rank()
Possiamo usare l’argomento tie.method per specificare come dovremmo gestire i valori di parità quando utilizziamo la funzione Rank() :
rank(x, ties. method = ' average ')
È possibile utilizzare una delle seguenti opzioni per specificare come gestire i collegamenti:
- media : (impostazione predefinita) assegna a ciascun elemento collegato il rango medio (gli elementi classificati 3° e 4° riceverebbero entrambi un rango di 3,5)
- primo : assegna il primo elemento collegato al rango più basso (gli elementi classificati in 3a e 4a posizione riceveranno rispettivamente i ranghi 3 e 4)
- min : assegna ciascun elemento collegato al rango più basso (gli elementi classificati 3° e 4° riceveranno entrambi un rango 3)
- max : assegna a ciascun elemento collegato il rango più alto (gli elementi classificati 3° e 4° riceveranno entrambi un rango 4)
- casuale : assegna a ciascun elemento in parità un rango casuale (entrambi gli elementi in parità per la 3a e 4a posizione possono ricevere entrambi i ranghi)
A seconda dello scenario, uno di questi metodi potrebbe essere più sensato da utilizzare rispetto agli altri.
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre operazioni comuni in R:
Come ordinare per più colonne in R
Come ordinare un frame di dati per data in R
Come calcolare il rango percentile in R