0Pricing
R Academy · Lezione

Classificazione dei valori con rank()

Assegni ranghi con i metodi di gestione dei pareggi: average, first, min, max, random.

Classificazione dei valori con rank() è una lezione R Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento R Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso R Academy include 4 lezioni in totale.

Che cosa restituisce rank()

rank(x) restituisce le posizioni in classifica dei valori di un vettore. Al valore più piccolo viene assegnato il grado 1, al secondo più piccolo il grado 2 e così via. A differenza di order(), l'output ha la stessa lunghezza dell'input e in ogni posizione contiene il relativo grado.

scores <- c(78, 92, 65, 88, 71)
ranks <- rank(scores)
print(scores)
print(ranks)

Gestire le parità: metodo average

Quando alcuni valori sono uguali (a pari merito), rank() utilizza l'argomento ties.method per stabilire come assegnare i gradi. Il valore predefinito è 'average': agli elementi a pari merito viene assegnata la media dei gradi che avrebbero occupato.

x <- c(10, 20, 20, 30)
# Default: average of positions 2 and 3 = 2.5
rank(x)
rank(x, ties.method = 'average')

Metodo per le parità: first e last

ties.method = 'first' assegna il grado più basso all'elemento a pari merito che compare per primo nel vettore. 'last' fa l'opposto: all'elemento precedente viene assegnato il grado più alto.

x <- c(10, 20, 20, 30)
cat('first:', rank(x, ties.method = 'first'), '\n')
cat('last: ', rank(x, ties.method = 'last'),  '\n')

Metodo per le parità: min e max

'min' assegna a tutti gli elementi a pari merito il grado minimo possibile (come nello sport: due giocatori a pari merito al 3º posto ricevono entrambi il grado 3 e nessuno riceve il grado 4). 'max' assegna a tutti gli elementi a pari merito il grado massimo.

x <- c(10, 20, 20, 30)
cat('min:', rank(x, ties.method = 'min'), '\n')
cat('max:', rank(x, ties.method = 'max'), '\n')

Metodo per le parità: random

ties.method = 'random' risolve le parità assegnando casualmente gradi distinti agli elementi a pari merito. Ogni chiamata può produrre un risultato diverso. È utile quando servono gradi integer univoci, ma l'ordine usato per risolvere le parità non è importante.

x <- c(10, 20, 20, 20, 30)
set.seed(42)
cat('random run 1:', rank(x, ties.method = 'random'), '\n')
set.seed(99)
cat('random run 2:', rank(x, ties.method = 'random'), '\n')

Classifica densa e classifica standard

rank() di R produce una classifica a competizione standard (1, 2, 2, 4). Per una classifica densa (1, 2, 2, 3, senza intervalli), usi rank(x, ties.method = 'min') sui valori unici oppure utilizzi i pacchetti data.table o dplyr. Ecco una soluzione alternativa in R base:

x <- c(10, 20, 20, 30)
# Standard ranking (gaps after ties)
cat('Standard:', rank(x, ties.method = 'min'), '\n')
# Dense ranking: rank of sorted unique values
dense <- match(x, sort(unique(x)))
cat('Dense:   ', dense, '\n')

rank() vs order() vs sort()

Queste tre funzioni sono correlate, ma restituiscono elementi diversi: sort(x) restituisce i valori ordinati, order(x) restituisce le posizioni che ordinano il vettore e rank(x) restituisce il rango di ogni posizione. Ecco un confronto affiancato.

x <- c(30, 10, 50, 20, 40)
cat('x       :', x,        '\n')
cat('sort(x) :', sort(x),  '\n')
cat('order(x):', order(x), '\n')
cat('rank(x) :', rank(x),  '\n')

Ranghi in ordine decrescente

Per assegnare i ranghi dal valore più grande al più piccolo (rango 1 = valore più alto), neghi il vettore prima di passarlo a rank(). Questo è il modello da usare per le classifiche in cui il rango 1 indica il risultato migliore.

scores <- c(78, 92, 65, 88, 71)
desc_ranks <- rank(-scores)
cat('Scores:      ', scores,     '\n')
cat('Rank (best=1):', desc_ranks, '\n')

Aggiungere ranghi a un data frame

Un'operazione comune consiste nell'aggiungere una colonna di ranghi a un data frame. Usi rank() con ties.method = 'min' e neghi i valori per l'ordinamento decrescente, così da creare una classifica corretta.

df <- data.frame(
  player = c('Alice', 'Bob', 'Carol', 'Dave'),
  score  = c(250, 400, 250, 375)
)
df$rank <- rank(-df$score, ties.method = 'min')
df[order(df$rank), ]

rank() con valori NA

rank() dispone di un argomento na.last, proprio come sort() e order(). Il valore predefinito è 'keep': ai valori NA assegna il rango NA, mentre assegna i ranghi agli elementi non-NA considerandoli tra loro.

x <- c(5, NA, 2, NA, 8, 1)
cat('na.last=keep:  ', rank(x, na.last = 'keep'), '\n')
cat('na.last=TRUE:  ', rank(x, na.last = TRUE),   '\n')
cat('na.last=FALSE: ', rank(x, na.last = FALSE),  '\n')

Ranghi percentile

Converta i ranghi in percentili dividendoli per il conteggio totale. Un rango percentile indica quale frazione dei valori è minore o uguale a un determinato elemento. È utile in statistica e nella valutazione scolastica.

scores <- c(60, 75, 82, 91, 68, 77, 85, 95)
n <- length(scores)
pct_rank <- rank(scores) / n * 100
result <- data.frame(score = scores, percentile = round(pct_rank, 1))
result[order(result$score), ]

Verifica rapida

Quale valore di ties.method assegna a tutti gli elementi a pari merito lo stesso rango più basso possibile, come negli sport, dove due giocatori condividono il 3° posto e nessuno ottiene il 4°?

Concetti chiave di rank()

Concetti chiave di rank():

  • rank(x) restituisce il rango di ogni elemento (con la stessa lunghezza dell'input)
  • Il valore predefinito ties.method = 'average': gli elementi a pari merito condividono la media dei loro ranghi
  • 'min' = stile sportivo (rango più basso condiviso), 'max' = rango più alto condiviso
  • 'first' e 'last' risolvono i pari merito in base all'ordine di apparizione
  • Usi rank(-x) per ottenere ranghi decrescenti (rango 1 = valore più grande)
  • Aggiunga colonne di ranghi ai data frame con df$rank <- rank(-df$score, ties.method='min')
x <- c(10, 30, 20, 30, 10)
cat('average:', rank(x, ties.method = 'average'), '\n')
cat('min:    ', rank(x, ties.method = 'min'),     '\n')
cat('max:    ', rank(x, ties.method = 'max'),     '\n')
cat('first:  ', rank(x, ties.method = 'first'),   '\n')

Domande Frequenti

La lezione «Classificazione dei valori con rank()» è gratuita?

Sì — il testo completo di «Classificazione dei valori con rank()» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso R Academy, passa a CoddyKit PRO. Il corso R Academy include 4 lezioni in totale.

Cosa imparerò in «Classificazione dei valori con rank()»?

Assegni ranghi con i metodi di gestione dei pareggi: average, first, min, max, random. Eserciti R Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare R Academy?

Non è richiesta alcuna esperienza precedente. R Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Classificazione dei valori con rank()»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione R Academy?

Sì. Ogni lezione R Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Ordinamento dei vettori con sort()
  2. order() per un ordinamento flessibile
  3. Classificazione dei valori con rank()
  4. Ordinamento dei data frame per colonna
← Torna a R Academy