Dplyr summarise(): Opsummér variabler (kolonner)

Det er vigtigt at kunne aggregere (opsummere) information fra kolonnerne i en dataframe. Det er formålet med funktionen summarise(). Funktionerne summarise() og summarize() er identiske synonymer. Disse funktioner bruges i kombination med andre funktioner til at beregne gennemsnit, medianer, spredningsmål eller andre beregninger af interesse.

Almindelige funktioner, der bruges i kombination med summarise():

  • Centralmål: mean(), median()
  • Spredningsmål: sd(), IQR(), mad()
  • Intervaller: min(), max(), quantile()
  • Positioner: first(), last(), nth()
  • Antal: n(), n_distinct()
  • Logiske værdier: any(), all()

I dette kapitel bruger vi mpg-data til at demonstrere disse funktioner. Aktivér mpg-data ved at aktivere tidyverse som følger:

## Aktivér tidyverse
library(tidyverse)

## Aktivér mpg-data
data(mpg)

## Inspicér de første rækker
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

Eksempel 1: Beregn gennemsnit, standardafvigelse og interkvartilbredde for kolonnen 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 det fremgår ovenfor, blev mpg-data opsummeret til en ny dataframe med én enkelt række. De nye kolonner består af de værdier, vi specificerede i summarise().

Eksempel 2: Brug af group_by() sammen med summarise().

I dette eksempel opsummerer vi de samme variabler som i det foregående eksempel, men det sker nu separat for hver bilproducent. Bemærk, at vi skriver ungroup() allersidst for at deaktivere grupperingen af vores 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

Hvis du vil gemme dette resultat i en ny dataframe, bør du skrive ungroup() allersidst, så den nye dataframe ikke har grupperingen gemt, da dette kan føre til uventede resultater. For at gemme mpg-data i (eksempelvis) objektet mpg2 bliver koden som følger (bemærk ungroup() allersidst):

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

Eksempel 3: Beregn antal observationer med summarise():

Du kan bruge funktionen n() til at beregne antal observationer i hver gruppe, når summarise() anvendes. Her følger det samme eksempel som ovenfor, men med tilføjelse af n() til at beregne 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