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

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *