Dplyr summarise(): Oppsummere variabler (kolonner)

Det er viktig å kunne aggregere (oppsummere) informasjon fra kolonnene i en dataframe. Dette er formålet med funksjonen summarise(). Funksjonene summarise() og summarize() er identiske synonymer. Disse funksjonene brukes i kombinasjon med andre funksjoner for å beregne gjennomsnitt, medianer, spredningsmål eller andre beregninger av interesse.

Vanlige funksjoner som brukes i kombinasjon med summarise():

  • Sentralmål: mean(), median()
  • Spredningsmål: sd(), IQR(), mad()
  • Intervaller: min(), max(), quantile()
  • Posisjoner: first(), last(), nth()
  • Antall: n(), n_distinct()
  • Logiske verdier: any(), all()

I dette kapittelet bruker vi mpg-data for å demonstrere disse funksjonene. Aktiver mpg-data ved å aktivere tidyverse slik:

## Aktiver tidyverse
library(tidyverse)

## Aktiver mpg-data
data(mpg)

## Inspiser de første radene
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 gjennomsnitt, standardavvik 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, ble mpg-data oppsummert til en ny dataframe med én enkelt rad. De nye kolonnene består av verdiene vi spesifiserte i summarise().

Eksempel 2: Bruke group_by() sammen med summarise().

I dette eksempelet oppsummerer vi de samme variablene som i forrige eksempel, men nå gjøres det separat for hver bilprodusent. Merk at vi skriver ungroup() helt til slutt for å deaktivere grupperingen av dataframen vår.

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 lagre dette resultatet i en ny dataframe, bør du skrive ungroup() helt til slutt, slik at den nye dataframen ikke får grupperingen lagret, siden dette kan føre til uventede resultater. For å lagre mpg-data i (for eksempel) objektet mpg2 blir koden slik (merk ungroup() helt til slutt):

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 antall observasjoner med summarise():

Du kan bruke funksjonen n() til å beregne antall observasjoner i hver gruppe når summarise() brukes. Her følger det samme eksempelet som ovenfor, men med tillegg av n() for å beregne antall observasjoner:

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