0Pricing
R Academy · Lezione

Ordinamento dei data frame per colonna

Ordini interi data frame usando order() e arrange() di dplyr.

Ordinamento dei data frame per colonna è una lezione R Academy gratuita su CoddyKit. Questa è la lezione 4 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.

Ordinare un data frame in base a una colonna

Il metodo standard di base R per ordinare un data frame consiste nell'usare order() sulla colonna di interesse e gli indici risultanti per riordinare le righe. La virgola dopo gli indici seleziona tutte le colonne.

df <- data.frame(
  name = c('Charlie', 'Alice', 'Bob', 'Diana'),
  age  = c(35, 28, 42, 31),
  salary = c(55000, 48000, 72000, 61000)
)
df[order(df$age), ]

Ordinamento decrescente con la negazione

Per le colonne numeriche, neghi la colonna all'interno di order() per invertire la direzione dell'ordinamento. Il segno meno inverte tutti i valori, in modo che quello che era il massimo diventi il minimo ai fini dell'ordinamento.

df <- data.frame(
  name   = c('Charlie', 'Alice', 'Bob', 'Diana'),
  salary = c(55000, 48000, 72000, 61000)
)
# Highest salary first
df[order(-df$salary), ]

Ordinamento su più colonne

Passi più colonne a order() per ordinare in base a un criterio principale e poi a criteri secondari. Il secondo argomento risolve i pari merito del primo. Questo rispecchia la sintassi SQL ORDER BY col1, col2.

df <- data.frame(
  dept   = c('Eng', 'HR', 'Eng', 'HR', 'Eng'),
  name   = c('Zara', 'Bob', 'Alice', 'Eve', 'Mike'),
  salary = c(90000, 55000, 85000, 58000, 78000)
)
# Sort by dept, then by salary descending within dept
df[order(df$dept, -df$salary), ]

Ordinare le colonne di caratteri

L'ordinamento in base a una colonna di caratteri funziona allo stesso modo: order() gestisce l'ordinamento lessicografico. Per l'ordine alfabetico inverso, usi decreasing = TRUE invece della negazione (la negazione funziona solo con valori numerici).

df <- data.frame(
  city    = c('Paris', 'Athens', 'Berlin', 'London'),
  pop_mil = c(2.1, 0.6, 3.6, 9.0)
)
# Alphabetical by city
df[order(df$city), ]
# Reverse alphabetical
df[order(df$city, decreasing = TRUE), ]

Reimpostare i numeri di riga dopo l'ordinamento

Dopo l'ordinamento, i nomi delle righe riflettono le posizioni originali (ad esempio, 3, 1, 4, 2). Per reimpostarli come interi consecutivi a partire da 1, imposti row.names(df) <- NULL oppure racchiuda il risultato in data.frame().

df <- data.frame(
  x = c(30, 10, 20),
  y = c('c', 'a', 'b')
)
sorted <- df[order(df$x), ]
cat('Before reset:\n'); print(sorted)
row.names(sorted) <- NULL
cat('After reset:\n');  print(sorted)

Ordinare con valori NA

Quando una colonna usata per l'ordinamento contiene NA, order() li colloca alla fine per impostazione predefinita. Usi na.last = FALSE per spostare le righe con NA all'inizio oppure le filtri prima.

df <- data.frame(
  name  = c('Alice', 'Bob', 'Carol', 'Dave'),
  score = c(85, NA, 92, NA)
)
cat('NAs last (default):\n')
print(df[order(df$score), ])
cat('NAs first:\n')
print(df[order(df$score, na.last = FALSE), ])

dplyr::arrange() come alternativa moderna

Il pacchetto dplyr fornisce arrange() come alternativa più semplice. Sebbene dplyr non faccia parte di base R, conoscerne la sintassi la aiuta a leggere il codice R moderno. Nota: qui isRunnable è true solo per mostrare la sintassi: per eseguirla è necessario che dplyr sia installato.

# dplyr::arrange() syntax (requires dplyr installed)
# library(dplyr)
# df |> arrange(salary)           # ascending
# df |> arrange(desc(salary))     # descending
# df |> arrange(dept, desc(salary)) # multi-column

# Equivalent base R:
df <- data.frame(dept=c('A','B','A'), salary=c(50,70,60))
df[order(df$dept, -df$salary), ]

Ordinare i factor in base all'ordine dei livelli

Le colonne factor vengono ordinate in base al loro ordine dei livelli, non in ordine alfabetico. Questo consente di definire un ordine personalizzato impostando esplicitamente i livelli del factor prima dell'ordinamento.

df <- data.frame(
  priority = factor(c('Low', 'High', 'Medium', 'High', 'Low'),
                    levels = c('Low', 'Medium', 'High')),
  task = c('T1', 'T2', 'T3', 'T4', 'T5')
)
# Sorts by factor level (Low < Medium < High)
df[order(df$priority), ]

Ordinare e selezionare le prime righe

Un modello comune consiste nell'ordinare un data frame e poi prendere le prime N righe con head(), oppure le ultime N con tail(). È l'equivalente in base R di ORDER BY ... LIMIT N in SQL.

df <- data.frame(
  product = c('A', 'B', 'C', 'D', 'E'),
  revenue = c(1200, 4500, 890, 3100, 2750)
)
# Top 3 by revenue
top3 <- head(df[order(-df$revenue), ], 3)
row.names(top3) <- NULL
print(top3)

Ordinamento in-place e ordinamento assegnato

L'ordinamento non modifica il data frame originale: ne restituisce uno nuovo. Assegni sempre il risultato a una variabile, nuova oppure sovrascrivendo quella originale. Sovrascrivere l'originale va bene quando non ha più bisogno della versione non ordinata.

df <- data.frame(
  x = c(3, 1, 4, 1, 5, 9),
  y = c('c', 'a', 'd', 'b', 'e', 'i')
)
# Safe: assign to new variable
df_sorted <- df[order(df$x), ]
# Or overwrite original:
df <- df[order(df$x), ]
row.names(df) <- NULL
print(df)

Flusso di lavoro completo per l'ordinamento

Ecco un flusso di lavoro completo e realistico per ordinare un data frame: ordinare i dipendenti per nome del reparto in ordine crescente e poi per stipendio in ordine decrescente, reimpostare gli indici delle righe e visualizzare il risultato in modo chiaro.

employees <- data.frame(
  name   = c('Alice', 'Bob', 'Carol', 'Dave', 'Eve'),
  dept   = c('IT', 'HR', 'IT', 'HR', 'IT'),
  salary = c(85000, 58000, 92000, 63000, 78000)
)
result <- employees[order(employees$dept, -employees$salary), ]
row.names(result) <- NULL
print(result)

Verifica rapida

Come si ordina un data frame df in base a una colonna numerica df$salary in ordine decrescente usando base R?

Ordinamento dei data frame: concetti chiave

Concetti chiave per l'ordinamento dei data frame:

  • Idiom di base R: df[order(df$col), ]
  • Numeri in ordine decrescente: usi la negazione con - all'interno di order(-df$col)
  • Caratteri in ordine decrescente: usi l'argomento decreasing = TRUE
  • Più colonne: order(df$a, df$b) — l'ordinamento secondario risolve i pari merito
  • I factor vengono ordinati in base all'ordine dei livelli definito, non alfabeticamente
  • Reimposti i nomi delle righe con row.names(df) <- NULL dopo l'ordinamento
  • Alternativa moderna: dplyr::arrange() con desc() per l'ordine decrescente
df <- data.frame(
  name = c('Zara', 'Ana', 'Bob', 'Ana'),
  score = c(90, 85, 92, 88)
)
# Sort by name asc, score desc
result <- df[order(df$name, -df$score), ]
row.names(result) <- NULL
print(result)

Domande Frequenti

La lezione «Ordinamento dei data frame per colonna» è gratuita?

Sì — il testo completo di «Ordinamento dei data frame per colonna» è 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 «Ordinamento dei data frame per colonna»?

Ordini interi data frame usando order() e arrange() di dplyr. 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 4 di 4.

Quanto tempo richiede la lezione «Ordinamento dei data frame per colonna»?

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