Funksjonen mutate() utfører operasjoner på kolonner. Kommandoen mutate(mean_bmi=mean(bmi)) fører for eksempel til at kolonnen mean_bmi beregnes som gjennomsnittet av kolonnen bmi. Men hvordan gjør vi det hvis mean_bmi i stedet skal beregnes som gjennomsnittet av flere kolonner? Til dette trenger vi funksjonen rowwise().
I disse eksemplene bruker vi mpg-dataene som finnes i pakken tidyverse. Aktiver tidyverse og mpg slik:
library(tidyverse)
data(mpg)
## Inspiser de første 10 radene
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 demonstrasjonen skal bli tydeligere, beholder vi bare de numeriske kolonnene i mpg-dataene. Det nye objektet kalles mpg2:
mpg2 <- mpg %>% select(where(is.numeric))
## Inspiserer dataene igjen
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 lager nå to nye variabler: ny_variabel og ny_variabel_2. Disse variablene skal være gjennomsnittet av kolonnene cyl, displ og cty. Variabelen ny_variabel lages uten rowwise(). Variabelen ny_variabel_2 lages med rowwise(), det vil si at den innledes med rowwise(). Vi lager variablene samtidig slik at resultatene 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 rader samme verdi for ny_variabel (8,74). Dette skyldes at mutate() beregnet et kolonnevis (column wise) gjennomsnitt. Verdiene for ny_variabel_2 varierer derimot fra rad til rad, fordi verdiene er beregnet som et radvis (row wise) gjennomsnitt.