Riepiloghi raggruppati e group_by()
Aggrегhi i dati per gruppo e calcoli statistiche per ciascun gruppo.
Riepiloghi raggruppati e group_by() è una lezione R Academy gratuita su CoddyKit. Questa è la lezione 1 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.
Perché raggruppare i dati?
Raggruppare i dati è una delle operazioni più potenti nell'analisi dei dati. Invece di calcolare statistiche sull'intero dataset, le calcolate all'interno di ciascun gruppo. Il pacchetto dplyr rende questa operazione intuitiva con group_by() seguito da summarize().
library(dplyr)
# Sample sales data
sales <- data.frame(
region = c('North','North','South','South','East'),
revenue = c(120, 95, 200, 175, 88),
units = c(10, 8, 15, 12, 7)
)
print(sales)Nozioni di base su group_by()
group_by(col) contrassegna un data frame in modo che le operazioni successive vengano eseguite per gruppo. Non modifica i dati in sé, ma aggiunge metadati di raggruppamento. Potete raggruppare per una o più colonne.
library(dplyr)
sales <- data.frame(
region = c('North','North','South','South','East'),
revenue = c(120, 95, 200, 175, 88),
units = c(10, 8, 15, 12, 7)
)
# Group by region
grouped <- sales %>% group_by(region)
print(grouped)
print(group_keys(grouped))summarize() dopo group_by()
summarize() (o summarise()) riduce ogni gruppo a una singola riga. Specificate i nomi delle nuove colonne e le funzioni di riepilogo da applicare. Funzioni comuni: n(), mean(), sum(), min(), max().
library(dplyr)
sales <- data.frame(
region = c('North','North','South','South','East'),
revenue = c(120, 95, 200, 175, 88),
units = c(10, 8, 15, 12, 7)
)
sales %>%
group_by(region) %>%
summarize(
n = n(),
mean_revenue = mean(revenue),
total_units = sum(units)
)Contare con n()
n() all'interno di summarize() restituisce il numero di righe in ciascun gruppo. Non richiede argomenti. Per contare le righe che soddisfano una condizione, usate sum(condition). n_distinct(col) conta i valori unici.
library(dplyr)
employees <- data.frame(
dept = c('HR','HR','Eng','Eng','Eng','Sales'),
salary = c(55000, 60000, 95000, 105000, 90000, 70000),
senior = c(FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)
)
employees %>%
group_by(dept) %>%
summarize(
count = n(),
senior_count = sum(senior),
avg_salary = mean(salary)
)Raggruppare per più colonne
Potete passare più colonne a group_by(). I gruppi vengono formati da ogni combinazione di valori presente nei dati. È utile per le tabelle a doppia entrata e i riepiloghi gerarchici.
library(dplyr)
orders <- data.frame(
region = c('North','North','South','South','North','South'),
product = c('A','B','A','B','A','A'),
sales = c(100, 200, 150, 250, 120, 180)
)
orders %>%
group_by(region, product) %>%
summarize(
total_sales = sum(sales),
orders = n(),
.groups = 'drop'
)L'argomento .groups
Dopo summarize(), il risultato è ancora raggruppato per tutte le variabili di raggruppamento tranne l'ultima. L'argomento .groups controlla questo comportamento:
'drop_last'— impostazione predefinita, rimuove l'ultimo livello di raggruppamento'drop'— rimuove tutti i raggruppamenti'keep'— mantiene tutti i raggruppamenti
library(dplyr)
df <- data.frame(
year = c(2022,2022,2023,2023),
quarter = c('Q1','Q2','Q1','Q2'),
revenue = c(100, 120, 130, 150)
)
# .groups = 'drop' ensures ungrouped result
result <- df %>%
group_by(year, quarter) %>%
summarize(total = sum(revenue), .groups = 'drop')
print(result)
print(is.grouped_df(result)) # FALSEungroup() in modo esplicito
Potete sempre chiamare ungroup() per rimuovere i metadati di raggruppamento da un data frame. È importante quando volete che le operazioni successive agiscano sull'intero dataset e non sui singoli gruppi.
library(dplyr)
df <- data.frame(
dept = c('HR','HR','Eng','Eng'),
salary = c(55000, 60000, 95000, 105000)
)
# Without ungroup: rank is within group
df %>%
group_by(dept) %>%
mutate(rank_in_dept = rank(salary)) %>%
ungroup() %>%
mutate(rank_overall = rank(salary))group_keys() e n_groups()
group_keys() restituisce un data frame che mostra le combinazioni uniche dei gruppi. n_groups() indica quanti gruppi esistono. Sono funzioni utili per esaminare i dati prima di eseguire operazioni raggruppate.
library(dplyr)
df <- data.frame(
country = c('US','US','UK','UK','DE'),
category = c('A','B','A','A','B'),
value = c(10, 20, 15, 25, 30)
)
grouped <- df %>% group_by(country, category)
cat('Number of groups:', n_groups(grouped), '\n')
print(group_keys(grouped))Riepilogare con più statistiche
Potete calcolare molte statistiche riepilogative in una sola chiamata a summarize(). Combinate conteggio, media, mediana, deviazione standard, minimo, massimo e calcoli personalizzati in un'unica operazione.
library(dplyr)
scores <- data.frame(
class = c('A','A','A','B','B','B','C','C'),
score = c(85, 90, 78, 92, 88, 95, 70, 75)
)
scores %>%
group_by(class) %>%
summarize(
n = n(),
mean_score = round(mean(score), 1),
median_score = median(score),
sd_score = round(sd(score), 2),
min_score = min(score),
max_score = max(score)
)mutate() consapevole dei gruppi
mutate() dopo group_by() calcola i valori all'interno di ciascun gruppo, mantenendo però tutte le righe (a differenza di summarize()). È perfetto per calcolare metriche a livello di gruppo da associare a ogni riga.
library(dplyr)
sales <- data.frame(
region = c('East','East','West','West','West'),
rep = c('Alice','Bob','Carol','Dave','Eve'),
revenue = c(150, 200, 120, 180, 160)
)
sales %>%
group_by(region) %>%
mutate(
region_total = sum(revenue),
pct_of_region = round(100 * revenue / sum(revenue), 1)
) %>%
ungroup()Filtrare all'interno dei gruppi
filter() dopo group_by() filtra le righe in base a condizioni a livello di gruppo. Ad esempio, potete mantenere solo il risultato migliore per regione o le righe in cui il valore supera la media del gruppo.
library(dplyr)
sales <- data.frame(
region = c('East','East','West','West','North','North'),
rep = c('Alice','Bob','Carol','Dave','Eve','Frank'),
revenue = c(150, 200, 120, 180, 95, 130)
)
# Keep the top rep per region
sales %>%
group_by(region) %>%
filter(revenue == max(revenue)) %>%
ungroup()Verifica rapida
Che cosa fa l'argomento .groups = 'drop' in summarize()?
Riepilogo: riepiloghi raggruppati
Concetti chiave dei riepiloghi raggruppati:
group_by(col)aggiunge il raggruppamento: i dati non cambiano, ma le operazioni diventano consapevoli dei gruppisummarize()riduce i gruppi a una riga ciascuno: usaten(),mean(),sum()e così via.groups = 'drop'garantisce che il risultato non sia raggruppatoungroup()rimuove il raggruppamento in qualsiasi momentogroup_keys()esamina i livelli dei gruppi;n_groups()li contamutate()+group_by()aggiunge colonne a livello di gruppo senza ridurre il numero di righe
library(dplyr)
# Full pipeline example
data.frame(
dept = c('Eng','Eng','HR','HR','Sales'),
salary = c(95000, 110000, 60000, 65000, 75000)
) %>%
group_by(dept) %>%
summarize(
headcount = n(),
avg_salary = mean(salary),
.groups = 'drop'
) %>%
arrange(desc(avg_salary))Domande Frequenti
La lezione «Riepiloghi raggruppati e group_by()» è gratuita?
Sì — il testo completo di «Riepiloghi raggruppati e group_by()» è 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 «Riepiloghi raggruppati e group_by()»?
Aggrегhi i dati per gruppo e calcoli statistiche per ciascun gruppo. 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 1 di 4.
Quanto tempo richiede la lezione «Riepiloghi raggruppati e group_by()»?
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
- Riepiloghi raggruppati e group_by()
- Funzioni finestra: lag, lead, cumsum
- Join tra più tabelle in dplyr
- Valutazione tidy: {{ }} e .data