Funktionen mutate() udfører operationer på kolonner. Eksempelvis resulterer kommandoen mutate(mean_bmi=mean(bmi)) i, at kolonnen mean_bmi beregnes som gennemsnittet af kolonnen bmi. Men hvad gør vi, hvis mean_bmi i stedet skal beregnes som gennemsnittet af flere kolonner? Til det har vi brug for funktionen rowwise().
I disse eksempler bruger vi mpg-data, som findes i pakken tidyverse. Aktivér tidyverse og mpg på følgende måde:
library(tidyverse)
data(mpg)
## Inspicér de første 10 rækker
head(mpg, 10)manufacturer model displ year cyl trans drv cty hwy fl class
audi a4 1.8 1999 4 auto(l5) f 18 29 p compact
audi a4 1.8 1999 4 manual(m5) f 21 29 p compact
audi a4 2 2008 4 manual(m6) f 20 31 p compact
audi a4 2 2008 4 auto(av) f 21 30 p compact
audi a4 2.8 1999 6 auto(l5) f 16 26 p compact
audi a4 2.8 1999 6 manual(m5) f 18 26 p compact
audi a4 3.1 2008 6 auto(av) f 18 27 p compact
audi a4 quattro 1.8 1999 4 manual(m5) 4 18 26 p compact
audi a4 quattro 1.8 1999 4 auto(l5) 4 16 25 p compact
audi a4 quattro 2 2008 4 manual(m6) 4 20 28 p compactFor at gøre demonstrationen tydeligere gemmer vi kun de numeriske kolonner i mpg-data. Det nye objekt kaldes mpg2:
mpg2 <- mpg %>% select(where(is.numeric))
## Inspicerer data igen
head(mpg2, 10) displ year cyl cty hwy
1.8 1999 4 18 29
1.8 1999 4 21 29
2 2008 4 20 31
2 2008 4 21 30
2.8 1999 6 16 26
2.8 1999 6 18 26
3.1 2008 6 18 27
1.8 1999 4 18 26
1.8 1999 4 16 25
2 2008 4 20 28Vi opretter nu to nye variabler: ny_variabel og ny_variabel_2. Disse variabler skal være gennemsnittet af kolonnerne cyl, displ og cty. Variablen ny_variabel oprettes uden rowwise(). Variablen ny_variabel_2 oprettes med rowwise(), hvilket betyder, at den forudgås af rowwise(). Vi opretter variablerne samtidig, så resultatet kan sammenlignes direkte. Koden er som følger:
mpg2 |>
mutate(ny_variabel = mean(c(cyl, displ, cty))) |>
rowwise() |>
mutate(ny_variabel_2 = mean(c(cyl, displ, cty))) displ year cyl cty hwy ny_variabel ny_variabel_2
1.8 1999 4 18 29 8.74 7.93
1.8 1999 4 21 29 8.74 8.93
2 2008 4 20 31 8.74 8.67
2 2008 4 21 30 8.74 9
2.8 1999 6 16 26 8.74 8.27
2.8 1999 6 18 26 8.74 8.93
3.1 2008 6 18 27 8.74 9.03
1.8 1999 4 18 26 8.74 7.93
1.8 1999 4 16 25 8.74 7.27
2 2008 4 20 28 8.74 8.67Som det fremgår ovenfor, har alle rækker samme værdi for ny_variabel (8,74). Det skyldes, at mutate() beregnede et kolonnevis (column wise) gennemsnit. Værdierne for ny_variabel_2 varierer derimod fra række til række, hvilket skyldes, at værdierne er beregnet som et rækkevis (row wise) gennemsnit.