Dplyr summarise(): Variablen (Spalten) zusammenfassen

Es ist wichtig, Informationen aus den Spalten eines Data Frames aggregieren (zusammenfassen) zu können. Genau dafür ist die Funktion summarise() gedacht. Die Funktionen summarise() und summarize() sind identische Synonyme. Sie werden in Kombination mit anderen Funktionen verwendet, um Mittelwerte, Mediane, Streuungsmaße oder andere interessierende Kennzahlen zu berechnen.

Häufig zusammen mit summarise() verwendete Funktionen:

  • Lagemaße: mean(), median()
  • Streuungsmaße: sd(), IQR(), mad()
  • Bereiche: min(), max(), quantile()
  • Positionen: first(), last(), nth()
  • Anzahl: n(), n_distinct()
  • Logische Werte: any(), all()

In diesem Kapitel verwenden wir den Datensatz mpg, um diese Funktionen zu demonstrieren. Laden Sie die mpg-Daten, indem Sie tidyverse wie folgt aktivieren:

## tidyverse aktivieren
library(tidyverse)

## mpg-Daten laden
data(mpg)

## Erste Zeilen ansehen
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     compact

Beispiel 1: Mittelwert, Standardabweichung und Interquartilsabstand für die Spalte displ in mpg berechnen:

 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.2

Wie oben zu sehen, wurden die mpg-Daten zu einem neuen Data Frame mit einer einzigen Zeile zusammengefasst. Die neuen Spalten bestehen aus den Werten, die wir in summarise() angegeben haben.

Beispiel 2: group_by() zusammen mit summarise() verwenden.

In diesem Beispiel fassen wir dieselben Variablen wie im vorherigen Beispiel zusammen, jetzt aber getrennt für jeden Autohersteller. Beachten Sie, dass wir ganz am Ende ungroup() schreiben, um die Gruppierung unseres Data Frames aufzuheben.

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.5

Wenn Sie dieses Ergebnis in einem neuen Data Frame speichern möchten, sollten Sie ganz am Ende ungroup() schreiben, damit im neuen Data Frame keine Gruppierung gespeichert bleibt, da dies zu unerwarteten Ergebnissen führen kann. Um die mpg-Daten (beispielsweise) im Objekt mpg2 zu speichern, lautet der Code wie folgt (beachten Sie ungroup() ganz am Ende):

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

Beispiel 3: Anzahl der Beobachtungen mit summarise() berechnen:

Mit der Funktion n() können Sie bei Verwendung von summarise() die Anzahl der Beobachtungen in jeder Gruppe berechnen. Hier folgt dasselbe Beispiel wie oben, ergänzt um n() zur Berechnung der Anzahl der Beobachtungen:

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