Il est essentiel de savoir agréger (résumer) l'information contenue dans les colonnes d'un data frame. C'est précisément le rôle de la fonction summarise(). Les fonctions summarise() et summarize() sont des synonymes strictement identiques. Elles s'utilisent en combinaison avec d'autres fonctions pour calculer des moyennes, des médianes, des mesures de dispersion ou tout autre calcul d'intérêt.
Fonctions couramment utilisées avec summarise() :
- Mesures de tendance centrale :
mean(), median() - Mesures de dispersion :
sd(), IQR(), mad() - Étendues :
min(), max(), quantile() - Positions :
first(), last(), nth() - Effectifs :
n(), n_distinct() - Valeurs logiques :
any(), all()
Dans ce chapitre, nous utilisons les données mpg pour illustrer ces fonctions. Chargez les données mpg en activant le tidyverse comme suit :
## Activer le tidyverse
library(tidyverse)
## Charger les données mpg
data(mpg)
## Inspecter les premières lignes
head(mpg) manufacturer model displ year cyl trans drv cty hwy fl class
1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact
2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact
3 audi a4 2 2008 4 manual(m6) f 20 31 p compact
4 audi a4 2 2008 4 auto(av) f 21 30 p compact
5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compact
6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compactExemple 1 : calculer la moyenne, l'écart-type et l'écart interquartile de la colonne displ de mpg :
mpg |>
summarise(mean_displ = mean(displ, na.rm=T),
sd_displ = sd(displ, na.rm=T),
iqr_displ = IQR(displ, na.rm=T)) mean_displ sd_displ iqr_displ
3.47 1.29 2.2Comme on le voit ci-dessus, les données mpg ont été résumées en un nouveau data frame ne comportant qu'une seule ligne. Les nouvelles colonnes correspondent aux valeurs que nous avons spécifiées dans summarise().
Exemple 2 : utiliser group_by() avec summarise().
Dans cet exemple, nous résumons les mêmes variables que dans l'exemple précédent, mais cette fois séparément pour chaque constructeur automobile. Notez que nous écrivons ungroup() tout à la fin pour désactiver le regroupement de notre data frame.
mpg |>
group_by(manufacturer) |>
summarise(mean_displ = mean(displ, na.rm=T),
sd_displ = sd(displ, na.rm=T),
iqr_displ = IQR(displ, na.rm=T)) manufacturer mean_displ sd_displ iqr_displ
audi 2.54 0.673 1.03
chevrolet 5.06 1.37 1.4
dodge 4.38 0.868 0.9
ford 4.54 0.541 0.600
honda 1.71 0.145 0.2
hyundai 2.43 0.365 0.55
jeep 4.58 1.02 1.03
land rover 4.3 0.258 0.300
lincoln 5.4 0 0
mercury 4.4 0.490 0.700
nissan 3.27 0.864 1
pontiac 3.96 0.808 0
subaru 2.46 0.109 0
toyota 2.95 0.931 1.15
volkswagen 2.26 0.443 0.5Si vous souhaitez enregistrer ce résultat dans un nouveau data frame, il est conseillé d'écrire ungroup() tout à la fin afin que le nouveau data frame ne conserve pas le regroupement, car cela peut conduire à des résultats inattendus. Pour enregistrer les données mpg dans (par exemple) l'objet mpg2, le code est le suivant (notez ungroup() tout à la fin) :
mpg2 <- mpg |>
group_by(manufacturer) |>
summarise(mean_displ = mean(displ, na.rm=T),
sd_displ = sd(displ, na.rm=T),
iqr_displ = IQR(displ, na.rm=T)) |>
ungroup()Exemple 3 : calculer le nombre d'observations avec summarise() :
Vous pouvez utiliser la fonction n() pour calculer le nombre d'observations dans chaque groupe lorsque vous utilisez summarise(). Voici le même exemple que ci-dessus, complété par n() pour calculer le nombre d'observations :
mpg |>
group_by(manufacturer) |>
summarise(n = n(),
mean_displ = mean(displ, na.rm=T),
sd_displ = sd(displ, na.rm=T),
iqr_displ = IQR(displ, na.rm=T))manufacturer n mean_displ sd_displ iqr_displ
audi 18 2.54 0.673 1.03
chevrolet 19 5.06 1.37 1.4
dodge 37 4.38 0.868 0.9
ford 25 4.54 0.541 0.600
honda 9 1.71 0.145 0.2
hyundai 14 2.43 0.365 0.55
jeep 8 4.58 1.02 1.03
land rover 4 4.3 0.258 0.300
lincoln 3 5.4 0 0
mercury 4 4.4 0.490 0.700
nissan 13 3.27 0.864 1
pontiac 5 3.96 0.808 0
subaru 14 2.46 0.109 0
toyota 34 2.95 0.931 1.15
volkswagen 27 2.26 0.443 0.5