Passer au contenu principal
eLearner.app
Module 4 · Leçon 2 sur 28/10 dans le cours~15 min
Leçons du module (2/2)

Mutations et Agrégations

En plus de sélectionner et filtrer, dplyr offre de puissantes fonctionnalités pour créer de nouvelles colonnes calculées et pour résumer les données en les agrégeant par groupes.


Créer de Nouvelles Colonnes : mutate()

Le verbe mutate() permet de calculer de nouvelles colonnes ou de modifier des colonnes existantes, tout en conservant intactes les colonnes d'origine.

Code
# Ajoute une colonne 'double_salary' calculée sur la valeur de 'salary'
df %>%
  mutate(double_salary = salary * 2)

# Vous pouvez créer plusieurs colonnes en même temps
df %>%
  mutate(
    total_cost = quantity * price,
    tax = total_cost * 0.22
  )

Groupement et Agrégation : group_by() et summarise()

L'analyse de données nécessite souvent le calcul de statistiques de résumé (ex. moyenne, somme, nombre d'éléments) pour des groupes de lignes (par exemple, calculer le salaire moyen pour chaque département).

1. group_by()

Regroupe le data frame en fonction des valeurs d'une ou plusieurs colonnes. En soi, cela ne change pas l'aspect visuel des données, mais indique à dplyr que les opérations suivantes devront être exécutées "groupe par groupe".

2. summarise() (ou summarize())

Réduit plusieurs lignes à une seule ligne de résumé en appliquant des fonctions statistiques comme mean(), sum(), min(), max(), ou n() (qui compte le nombre de lignes).

Code
# Calcule le salaire moyen par département
df %>%
  group_by(department) %>%
  summarise(mean_salary = mean(salary))

Si vous souhaitez compter le nombre d'enregistrements appartenant à chaque groupe :

Code
# Compte le nombre d'employés par ville
df %>%
  group_by(city) %>%
  summarise(count = n())

À vous de jouer

Exercice 1 : Créer une colonne calculée

Exercice#r.m4.l2.e1
Tentatives : 0Chargement…

Étant donné le data frame df, créez une nouvelle colonne nommée total_price en multipliant la colonne quantity par la colonne price en utilisant mutate(). Sauvegardez le résultat dans df_new.

Chargement de l'éditeur…
Afficher l'indice

Utilisez mutate(total_price = quantity * price) au sein d'un pipeline sur df.

Solution disponible après 3 tentatives

Exercice 2 : Regrouper et résumer avec la moyenne

Exercice#r.m4.l2.e2
Tentatives : 0Chargement…

Calculez la moyenne de la colonne salary en regroupant les enregistrements par la colonne department. Sauvegardez la colonne agrégée sous le nom mean_salary et assignez le résultat final à df_grouped.

Chargement de l'éditeur…
Afficher l'indice

Utilisez df %>% group_by(department) %>% summarise(mean_salary = mean(salary))

Solution disponible après 3 tentatives

Exercice 3 : Compter les éléments par groupe

Exercice#r.m4.l2.e3
Tentatives : 0Chargement…

Comptez le nombre de lignes pour chaque ville (colonne city). Assignez le décompte à la variable count au sein de summarise() en utilisant la fonction n() et sauvegardez le résultat final dans df_counts.

Chargement de l'éditeur…
Afficher l'indice

Combinez group_by(city) et summarise(count = n()) dans un pipeline.

Solution disponible après 3 tentatives

Exercice 4 : Résumés multiples

Exercice#r.m4.l2.e4
Tentatives : 0Chargement…

Calculez la valeur minimale (min_price) et la valeur maximale (max_price) de la colonne price en regroupant par la colonne category. Sauvegardez le résultat dans df_summary.

Chargement de l'éditeur…
Afficher l'indice

Au sein de summarise(), séparez les métriques min_price = min(price) et max_price = max(price) par une virgule.

Solution disponible après 3 tentatives

Exercice 5 : Agrégation et filtres combinés

Exercice#r.m4.l2.e5
Tentatives : 0Chargement…

Écrivez un pipeline qui regroupe df par la colonne department, calcule la moyenne de salary en la sauvegardant dans la nouvelle colonne avg_salary en utilisant mutate() (attention : utilisez mutate, pas summarise, pour conserver toutes les lignes), et enfin filtre pour ne garder que les enregistrements avec salary strictement supérieur à avg_salary. Sauvegardez dans res.

Chargement de l'éditeur…
Afficher l'indice

Utilisez df %>% group_by(department) %>% mutate(avg_salary = mean(salary)) %>% filter(salary > avg_salary)

Solution disponible après 3 tentatives