order() per un ordinamento flessibile
Ottenga la permutazione degli indici per ordinare secondo uno o più criteri.
order() per un ordinamento flessibile è una lezione R Academy gratuita su CoddyKit. Questa è la lezione 2 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 order()
order() non restituisce i valori ordinati, ma gli indici che consentirebbero di ordinare il vettore. Questa indirezione la rende molto più potente di sort(), perché può applicare quegli indici a qualsiasi struttura correlata.
x <- c(30, 10, 50, 20, 40)
indices <- order(x)
print(indices)
# Verify: x[indices] gives sorted x
print(x[indices])order() in ordine decrescente
Come sort(), anche order() accetta decreasing = TRUE per restituire gli indici che producono una sequenza decrescente. È utile per ordinare dal valore più grande a quello più piccolo.
scores <- c(78, 92, 65, 88, 71)
desc_order <- order(scores, decreasing = TRUE)
cat('Rank order (index):', desc_order, '\n')
cat('Scores high to low:', scores[desc_order], '\n')Ordinare un data frame in base a una colonna
L'uso più pratico di order() consiste nell'ordinare un data frame in base a una delle sue colonne. Passi la colonna a order(), quindi utilizzi gli indici restituiti per riordinare tutte le righe del data frame.
df <- data.frame(
name = c('Charlie', 'Alice', 'Bob', 'Diana'),
age = c(35, 28, 42, 31)
)
sorted_df <- df[order(df$age), ]
print(sorted_df)Ordinare un data frame in ordine decrescente
Per ordinare un data frame dal valore più grande a quello più piccolo in base a una colonna numerica, passi decreasing = TRUE a order(). I nomi delle righe (indici) nell'output riflettono le posizioni originali.
products <- data.frame(
item = c('Pen', 'Notebook', 'Stapler', 'Tape'),
price = c(1.5, 4.99, 7.25, 2.10)
)
products[order(products$price, decreasing = TRUE), ]Ordinamento su più colonne
Passi più vettori a order(), separandoli con virgole. R ordina in base al primo argomento, poi risolve le parità usando il secondo, il terzo e così via. Questo comportamento corrisponde alla clausola ORDER BY di SQL.
df <- data.frame(
dept = c('HR', 'IT', 'HR', 'IT', 'HR'),
salary = c(50000, 70000, 60000, 65000, 55000)
)
# Sort by dept first, then by salary within dept
df[order(df$dept, df$salary), ]Ordinamento multiplo misto crescente/decrescente
Per ordinare una colonna in modo crescente e un'altra in modo decrescente, neghi la colonna numerica decrescente con -. Per le colonne character, utilizzi xtfrm() per ottenere una rappresentazione integer ordinabile e poi la neghi.
df <- data.frame(
dept = c('HR', 'IT', 'HR', 'IT', 'HR'),
salary = c(50000, 70000, 60000, 65000, 55000)
)
# dept ascending, salary descending
df[order(df$dept, -df$salary), ]Gestire gli NA in order()
order() dispone anch'essa dell'argomento na.last, proprio come sort(). Per impostazione predefinita, na.last = NA colloca gli NA alla fine. Imposti na.last = TRUE o na.last = FALSE per controllarne esplicitamente la posizione.
vals <- c(5, NA, 2, NA, 8, 1)
# Default: NAs sorted last
order(vals)
# NAs first
order(vals, na.last = FALSE)Preservare i nomi delle righe dopo l'ordinamento
Quando seleziona un sottoinsieme di un data frame usando gli indici delle righe, R conserva i nomi originali delle righe. Utilizzi row.names(df) <- NULL oppure approcci con reset= per reimpostarli su 1, 2, 3, ... dopo l'ordinamento.
df <- data.frame(
city = c('Paris', 'Tokyo', 'NYC'),
pop = c(2.1, 13.9, 8.3)
)
sorted <- df[order(df$pop), ]
print(sorted)
# Reset row names
row.names(sorted) <- NULL
print(sorted)order() e sort() a confronto
La differenza principale è questa: sort(x) restituisce i valori ordinati, mentre order(x) restituisce le posizioni ordinate. Usi sort() quando le servono solo i valori; usi order() quando deve riordinare insieme strutture di dati correlate.
x <- c(50, 20, 80, 10, 60)
cat('sort(x) :', sort(x), '\n')
cat('order(x) :', order(x), '\n')
cat('x[order(x)]:', x[order(x)], '\n')Ordinare un data frame in base a una colonna stringa
Può ordinare anche in base a colonne character. order(df$name) restituisce gli indici delle righe in ordine alfabetico rispetto alla colonna name, che può poi utilizzare per riordinare il data frame.
employees <- data.frame(
name = c('Zara', 'Ahmed', 'Maria', 'Bruno'),
tenure = c(3, 7, 2, 5)
)
employees[order(employees$name), ]Combinare order() per ordinamenti complessi
Un ordinamento su tre livelli è semplice: passi tre vettori a order(). Ogni argomento aggiuntivo viene usato come criterio di spareggio per i valori uguali negli argomenti precedenti.
df <- data.frame(
region = c('West', 'East', 'West', 'East', 'West'),
dept = c('HR', 'IT', 'HR', 'IT', 'IT'),
score = c(85, 90, 78, 88, 92)
)
df[order(df$region, df$dept, df$score), ]Verifica rapida
Che cosa restituisce order(x) quando viene applicata a un vettore x?
Concetti chiave di order()
Concetti chiave di order():
order(x)restituisce indici, non valori: usix[order(x)]per ottenere i valori ordinati- Ordini i data frame con
df[order(df$col), ] - Ordinamento su più colonne:
order(df$a, df$b): le parità inavengono risolte usandob - Neghi le colonne numeriche con
-per ottenere un ordinamento decrescente negli ordinamenti multipli - Controlli la posizione degli NA con
na.last = TRUE/FALSE/NA - A differenza di
sort(),order()consente di ordinare insieme strutture parallele
df <- data.frame(
name = c('Eve', 'Bob', 'Alice', 'Charlie'),
score = c(88, 92, 88, 75)
)
# Sort by score descending, then name ascending for ties
df[order(-df$score, df$name), ]Impara R con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 43
- Lezioni
- 159
Domande Frequenti
La lezione «order() per un ordinamento flessibile» è gratuita?
Sì — il testo completo di «order() per un ordinamento flessibile» è 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 «order() per un ordinamento flessibile»?
Ottenga la permutazione degli indici per ordinare secondo uno o più criteri. 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 2 di 4.
Quanto tempo richiede la lezione «order() per un ordinamento flessibile»?
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
- Ordinamento dei vettori con sort()
- order() per un ordinamento flessibile
- Classificazione dei valori con rank()
- Ordinamento dei data frame per colonna