0Pricing
R Academy · Leçon

Synthèses groupées et group_by()

Agrégerez les données par groupes et calculez des statistiques pour chaque groupe.

Synthèses groupées et group_by() est une leçon R Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage R Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours R Academy comprend 4 leçons au total.

Pourquoi regrouper les données ?

Le regroupement des données est l’une des opérations les plus puissantes de l’analyse de données. Au lieu de calculer des statistiques sur l’ensemble d’un jeu de données, vous les calculez au sein de chaque groupe. Le paquet dplyr rend cette approche intuitive avec group_by(), suivi de 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)

Bases de group_by()

group_by(col) marque une trame de données afin que les opérations suivantes soient effectuées par groupe. Cette fonction ne modifie pas les données elles-mêmes : elle ajoute des métadonnées de regroupement. Vous pouvez regrouper les données selon une ou plusieurs colonnes.

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() après group_by()

summarize() (ou summarise()) réduit chaque groupe à une seule ligne. Vous indiquez les noms des nouvelles colonnes et les fonctions de synthèse à appliquer. Fonctions courantes : 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)
  )

Compter avec n()

n() utilisé dans summarize() renvoie le nombre de lignes de chaque groupe. Il ne nécessite aucun argument. Pour compter les lignes correspondant à une condition, utilisez sum(condition). n_distinct(col) compte les valeurs uniques.

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

Regrouper selon plusieurs colonnes

Vous pouvez transmettre plusieurs colonnes à group_by(). Les groupes sont formés par chaque combinaison de valeurs présente dans les données. Cette approche est utile pour les tableaux croisés et les synthèses hiérarchiques.

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’argument .groups

Après summarize(), le résultat reste regroupé selon toutes les variables de regroupement sauf la dernière. L’argument .groups contrôle ce comportement :

  • 'drop_last' — valeur par défaut, supprime le dernier niveau de regroupement
  • 'drop' — supprime tous les regroupements
  • 'keep' — conserve tous les regroupements
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() explicitement

Vous pouvez toujours appeler ungroup() pour supprimer les métadonnées de regroupement d’une trame de données. C’est important lorsque vous souhaitez que les opérations suivantes s’appliquent à l’ensemble des données et non à chaque groupe.

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() et n_groups()

group_keys() renvoie une trame de données présentant les combinaisons de groupes uniques. n_groups() indique le nombre de groupes existants. Ces fonctions sont pratiques pour examiner les données avant d’effectuer des opérations par groupe.

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

Synthétiser avec plusieurs statistiques

Vous pouvez calculer de nombreuses statistiques de synthèse dans un seul appel à summarize(). Combinez simultanément le nombre, la moyenne, la médiane, l’écart type, le minimum, le maximum et des calculs personnalisés.

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() sensible aux groupes

mutate() après group_by() calcule les valeurs au sein de chaque groupe tout en conservant toutes les lignes (contrairement à summarize()). C’est idéal pour calculer des indicateurs au niveau du groupe et les associer à chaque ligne.

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()

Filtrer au sein des groupes

filter() après group_by() filtre les lignes selon des conditions définies au niveau du groupe. Par exemple, vous pouvez conserver uniquement la meilleure performance de chaque région ou les lignes où la valeur dépasse la moyenne du groupe.

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()

Vérification rapide

Que fait l’argument .groups = 'drop' dans summarize() ?

Récapitulatif&nbsp;: synthèses par groupe

Points essentiels des synthèses par groupe :

  • group_by(col) ajoute un regroupement — les données restent inchangées, mais les opérations tiennent compte des groupes
  • summarize() réduit chaque groupe à une ligne — utilisez n(), mean(), sum(), etc.
  • .groups = 'drop' garantit que le résultat n’est pas regroupé
  • ungroup() supprime le regroupement à tout moment
  • group_keys() examine les niveaux de regroupement ; n_groups() les compte
  • mutate() + group_by() ajoute des colonnes au niveau du groupe sans réduire le nombre de lignes
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))

Questions Fréquemment Posées

La leçon « Synthèses groupées et group_by() » est-elle gratuite ?

Oui — le texte complet de « Synthèses groupées et group_by() » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours R Academy, passe à CoddyKit PRO. Le cours R Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Synthèses groupées et group_by() » ?

Agrégerez les données par groupes et calculez des statistiques pour chaque groupe. Tu pratiques R Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer R Academy ?

Aucune expérience préalable n'est requise. R Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Synthèses groupées et group_by() » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon R Academy ?

Oui. Chaque leçon R Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Synthèses groupées et group_by()
  2. Fonctions de fenêtre : lag, lead, cumsum
  3. Jointures entre plusieurs tables dans dplyr
  4. Évaluation tidy : {{ }} et .data
← Retour à R Academy