Funktionen mutate() utför operationer på kolumner. Exempelvis resulterar kommandot mutate(mean_bmi=mean(bmi)) till att kolumnen mean_bmi beräknas som medelvärdet av kolumnen bmi. Men hur gör vi om mean_bmi istället skall beräknas som medelvärdet av flera kolumner? För detta behöver vi funktionen rowwise().
I dessa exempel använder vi mpg data som finns i paketet tidyverse. Aktivera tidyverse och mpg som följer:
library(tidyverse)
data(mpg)
## Inspektera första 10 raderna
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 compactFör att demonstrationen skall bli tydligare sparar vi endast de numeriska kolumnerna i mpg data. Det nya objektet kallas mpg2:
mpg2 <- mpg %>% select(where(is.numeric))
## Inspekterar 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 skapar nu två nya variabler: ny_variabel och ny_variabel_2. Dessa variabler skall vara medelvärdet av kolumnerna cyl, displ och cty. Variabeln ny_variabel skapas utan rowwise(). Variabeln ny_variabel_2 skapas med rowwise(), vilket innebär att den föregås av rowwise(). Vi skapar variablerna samtidigt för att resultatet skall kunna jämföras direkt. Koden är som följer:
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 framgår ovan har alla rader samma värde på ny_variabel (8.74). Detta förklaras av att mutate() beräknade kolumnvis (column wise) medelvärde. Värdena för ny_variabel_2 varierar dock på varje rad, vilket beror på att värdena beräknats som radvis (row wise) medelvärde.