Lezioni del modulo (2/2)
Mutazioni e Aggregazioni
Oltre a selezionare e filtrare, dplyr offre potenti funzionalità per creare nuove colonne calcolate e per riassumere i dati aggregandoli in gruppi.
Creare Nuove Colonne: mutate()
Il verbo mutate() consente di calcolare nuove colonne o modificare colonne esistenti, mantenendo intatte le colonne originarie.
# Aggiunge una colonna 'double_salary' calcolata sul valore di 'salary'
df %>%
mutate(double_salary = salary * 2)
# Puoi creare più colonne contemporaneamente
df %>%
mutate(
total_cost = quantity * price,
tax = total_cost * 0.22
)
Raggruppamento e Aggregazione: group_by() e summarise()
Spesso l'analisi dei dati richiede il calcolo di statistiche di riepilogo (es. media, somma, conteggio) per gruppi di righe (ad esempio, calcolare lo stipendio medio per ogni dipartimento).
1. group_by()
Raggruppa il data frame in base ai valori di una o più colonne. Di per sé non cambia l'aspetto visivo dei dati, ma indica a dplyr che le operazioni successive dovranno essere eseguite "gruppo per gruppo".
2. summarise() (o summarize())
Riduce molte righe a una singola riga di riepilogo applicando funzioni statistiche come mean(), sum(), min(), max(), o n() (che conta le righe).
# Calcola lo stipendio medio per dipartimento
df %>%
group_by(department) %>%
summarise(mean_salary = mean(salary))
Se desideri contare quanti record appartengono a ciascun gruppo:
# Conta quanti dipendenti ci sono per città
df %>%
group_by(city) %>%
summarise(count = n())
Prova tu
Esercizio 1: Crea una colonna calcolata
Dato il data frame df, crea una nuova colonna chiamata total_price moltiplicando la colonna quantity per la colonna price usando mutate(). Salva il risultato in df_new.
Mostra suggerimento
Usa mutate(total_price = quantity * price) all'interno di una pipeline su df.
Soluzione disponibile dopo 3 tentativi
Esercizio 2: Raggruppa e riassumi con la media
Calcola la media della colonna salary raggruppando i record per la colonna department. Salva la colonna aggregata con il nome mean_salary e assegna il risultato finale a df_grouped.
Mostra suggerimento
Usa df %>% group_by(department) %>% summarise(mean_salary = mean(salary))
Soluzione disponibile dopo 3 tentativi
Esercizio 3: Conta elementi per gruppo
Conta il numero di righe per ogni città (colonna city). Assegna il conteggio alla variabile count all'interno di summarise() usando la funzione n() e salva il risultato finale in df_counts.
Mostra suggerimento
Combina group_by(city) con summarise(count = n()) in una pipeline.
Soluzione disponibile dopo 3 tentativi
Esercizio 4: Riepiloghi multipli
Calcola il valore minimo (min_price) e il valore massimo (max_price) della colonna price raggruppando per la colonna category. Salva il risultato in df_summary.
Mostra suggerimento
All'interno di summarise(), separa le metriche min_price = min(price) e max_price = max(price) con una virgola.
Soluzione disponibile dopo 3 tentativi
Esercizio 5: Aggregazione e filtri combinati
Scrivi una pipeline che raggruppi df per la colonna department, calcoli la media di salary salvandola nella nuova colonna avg_salary usando mutate() (attenzione: usa mutate, non summarise, per mantenere tutte le righe), e infine filtri mantenendo solo i record con salary strettamente maggiore di avg_salary. Salva in res.
Mostra suggerimento
Usa df %>% group_by(department) %>% mutate(avg_salary = mean(salary)) %>% filter(salary > avg_salary)
Soluzione disponibile dopo 3 tentativi