data("mtcars")
mean(mtcars[mtcars$cyl==6 & mtcars$am==1,"mpg"])
[1] 20.56667
Le pipe |> natif de R ou bien le pipe de la librairie dplyr permettent d’enchainer une suite de calcul.
Par exemple, on veut calculer la moyenne de la colonne mpg pour les voitures qui ont 6 cylindres et qui sont automatiques (mtcars) :
data("mtcars")
mean(mtcars[mtcars$cyl==6 & mtcars$am==1,"mpg"])
[1] 20.56667
ce qui donne avec le pipe :
library(dplyr)
Attaching package: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
|>
mtcars filter(cyl==6 & am==1) |>
select(mpg) |>
unlist() |>
mean()
[1] 20.56667
La fonction unlist permet de transformer la colonne obtenue par select.
Le pipe revient donc à enchainer des fonctions.
Le package dplyr possède de nombreuses fonctions permettant de faire de la gestion de données :
select, pour sélectionner des colonnes
filter, pour filtrer des lignes selon un (ou plusieurs) critère.
Elle permet de définir de nouvelles colonnes dans un data frame qui seront le résultat d’un calcul. Par exemple la consommation des voitures est exprimée en mpg (miles per galon) si on veut l’exprimer en L/100km alors on utilise (L/100 km) = 282.48 / MPG
<-mtcars |>
mtcarsmutate("L/100km"=282.48/mpg) |>
round(digits = 1)
La fonction group_by() permettra de faire des calculs selon les modalités d’une variable qualitative :
=mtcars |>
dfgroup_by(cyl,am) |>
summarise(M=mean(`L/100km`),SD=sd(`L/100km`))
`summarise()` has grouped output by 'cyl'. You can override using the `.groups`
argument.
df
# A tibble: 6 × 4
# Groups: cyl [3]
cyl am M SD
<dbl> <dbl> <dbl> <dbl>
1 4 0 12.4 0.751
2 4 1 10.3 1.76
3 6 0 14.8 1.21
4 6 1 13.8 0.462
5 8 0 19.4 4.08
6 8 1 18.4 0.636
Le résultat est un nouveau data frame dans le format tibble que l’on peut utiliser ensuite dans ggplot par exemple.
library(ggplot2)
ggplot(df,aes(x=factor(cyl),y=M,color=factor(am)))+
geom_point(position = position_dodge(.2))+
geom_errorbar(aes(ymin=M-2*SD,ymax=M+2*SD),width=.1,position = position_dodge(.2))