4  Manipulations data-frame

4.1 Le pipe

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.

4.2 La fonction mutate()

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<-mtcars |>
  mutate("L/100km"=282.48/mpg) |>
  round(digits = 1)

4.3 group_by(), summarise()

La fonction group_by() permettra de faire des calculs selon les modalités d’une variable qualitative :

df=mtcars |>
  group_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))