La fonction mutate() effectue des opérations sur des colonnes. Par exemple, la commande mutate(mean_bmi=mean(bmi)) calcule la colonne mean_bmi comme la moyenne de la colonne bmi. Mais comment procéder si mean_bmi doit plutôt être calculée comme la moyenne de plusieurs colonnes ? Pour cela, nous avons besoin de la fonction rowwise().
Dans ces exemples, nous utilisons les données mpg disponibles dans le package tidyverse. Chargez tidyverse et mpg comme suit :
library(tidyverse)
data(mpg)
## Inspecter les 10 premières lignes
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 compactPour rendre la démonstration plus claire, nous ne conservons que les colonnes numériques des données mpg. Le nouvel objet s'appelle mpg2 :
mpg2 <- mpg %>% select(where(is.numeric))
## Inspecter à nouveau les données
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 28Nous créons maintenant deux nouvelles variables : ny_variabel et ny_variabel_2. Ces variables doivent correspondre à la moyenne des colonnes cyl, displ et cty. La variable ny_variabel est créée sans rowwise(). La variable ny_variabel_2 est créée avec rowwise(), ce qui signifie qu'elle est précédée de rowwise(). Nous créons les deux variables simultanément afin de pouvoir comparer directement les résultats. Le code est le suivant :
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.67Comme on le voit ci-dessus, toutes les lignes ont la même valeur de ny_variabel (8,74). Cela s'explique par le fait que mutate() a calculé une moyenne par colonne (column wise). Les valeurs de ny_variabel_2 varient en revanche d'une ligne à l'autre, car elles ont été calculées comme une moyenne par ligne (row wise).