0Pricing
R Academy · Lezione

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))  # FALSE

ungroup() 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 gruppi
  • summarize() riduce i gruppi a una riga ciascuno: usate n(), mean(), sum() e così via
  • .groups = 'drop' garantisce che il risultato non sia raggruppato
  • ungroup() rimuove il raggruppamento in qualsiasi momento
  • group_keys() esamina i livelli dei gruppi; n_groups() li conta
  • mutate() + 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

  1. Riepiloghi raggruppati e group_by()
  2. Funzioni finestra: lag, lead, cumsum
  3. Join tra più tabelle in dplyr
  4. Valutazione tidy: {{ }} e .data
← Torna a R Academy