Dplyr summarise(): Summera variabler (kolumner)

Det är viktigt att kunna aggregera (sammanfatta) information från kolumnerna i en dataframe. Detta är syftet med funktionen summarise(). Funktionerna summarise() och summarize() är identiska synonymer. Dessa funktioner används i kombination med andra funktioner för att beräkna medelvärden, medianer, spridningsmått eller andra beräkningar av intresse.

Vanliga funktioner som används i kombination med summarise():

  • Centralmått: mean(), median()
  • Spridningsmått: sd(), IQR(), mad()
  • Intervaller: min(), max(), quantile()
  • Positioner: first(), last(), nth()
  • Antal: n(), n_distinct()
  • Logiska värden: any(), all()

I detta kapitel använder vi mpg data för att demonstrera dessa funktioner. Aktivera mpg data genom att aktivera tidyverse som följer:

## Aktivera tidyverse
library(tidyverse)

## Aktivera mpg data
data(mpg)

## Inspektera första raderna
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

Exempel 1: Beräkna medelvärden, standardavvikelse och interkvartilavstånd för kolumnen displ i 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.2

Som framgår ovan summerades mpg data till en ny dataframe med en enda rad. De nya kolumnerna utgörs av värdena vi specificerade i summarise().

Exempel 2: Använda group_by() tillsammans med summarise().

I detta exempel summerar vi samma variabler som i föregående exempel men det görs nu separat för varje biltillverkare. Notera att vi skriver ungroup() allra sist för att inaktivera grupperingen av vår dataframe.

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

Om du vill spara detta resultat i en ny dataframe bör du skriva ungroup() allra sista för att den nya dataframen inte skall ha grupperingen sparad eftersom detta kan leda till oväntade resultat. För att spara mpg data i (förslagsvis) objektet mpg2 blir koden som följer (notera ungroup() allra sist):

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

Exempel 3: Beräkna antal observationer med summarise():

Du kan använda funktionen n() för att beräkna antal observationer i varje grupp när summarise() används. Här följer samma exempel som ovan, men med tillägg av n() för att beräkna antal observationer:

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