Dplyr : introduction

Dplyr est l'un des packages les plus importants de R. Il a été créé par Hadley Wickham, également auteur de ggplot2, tidyr, lubridate et de bien d'autres. Dplyr comprend un large éventail de fonctions qui facilitent pratiquement toutes les opérations de traitement des données.

Les fonctions de base R (l'installation de base de R) permettent de réaliser bon nombre des opérations proposées par dplyr. Base R contient des fonctions telles que split(), subset(), sapply(), lapply(), tapply() et aggregate(), mais ces fonctions sont difficiles à utiliser et ne se combinent pas non plus de manière naturelle avec les autres fonctions du tidyverse. Dplyr est facile à prendre en main et peut en outre être combiné avec les fonctions de centaines d'autres packages R importants. De fait, de plus en plus de packages sont conçus et adaptés pour être utilisés conjointement avec dplyr. Dplyr fait partie du tidyverse, qui regroupe de nombreux autres packages importants (par exemple ggplot2).

Les fonctions de dplyr ne sont pas seulement plus simples à utiliser que celles de base R, elles sont aussi plus efficaces (elles consomment moins de mémoire vive et sont en règle générale plus rapides).

Toutes les fonctions de dplyr sont conçues pour s'appliquer à des data frames (voir la discussion précédente). Un data frame est un tableau rectangulaire composé de lignes et de colonnes. Dans presque tous les cas, les lignes correspondent aux observations et les colonnes aux variables (les mesures qui décrivent les observations).

Dans ce chapitre, toutes les fonctions de dplyr seront présentées. Parmi elles figurent notamment :

  • filter() - sélectionner des variables/cas en fonction de leur valeur
  • mutate() - ajoute une nouvelle variable qui est fonction de variables existantes
  • select() - sélectionner des variables en fonction de leur nom
  • arrange() - modifier l'ordre des lignes d'un data frame
  • rename() - renommer des variables
  • slice() - sélectionne des variables en fonction de leur position
  • summarise() - résume plusieurs variables en une variable de synthèse
  • group_by() - appliquer vos fonctions à un groupe déterminé d'individus de votre fichier de données
  • across() - appliquer une ou plusieurs fonctions à un groupe particulier de variables
  • if_else() - crée une nouvelle variable en fonction de différentes conditions pouvant être remplies
  • row_number() - utiliser les numéros de ligne pour ajouter une colonne contenant le numéro de ligne
  • rowwise() - appliquer vos fonctions à un groupe de lignes (observations)
  • distinct() - sélectionner les lignes présentant des valeurs uniques pour une ou plusieurs variables de votre fichier de données

Installer dplyr

Dplyr fait partie de l'écosystème plus vaste tidyverse et peut donc être installé avec la commande suivante :

install.packages("tidyverse", dependencies = T)

Le chargement du tidyverse entraîne le chargement des packages suivants : dplyr, ggplot2, forcats, tibble, tidyr, stringr, purr, readr :

library(tidyverse)
── Attaching packages ─────────────────────────────────────────────── tidyverse 1.3.2 ──
✔ ggplot2 3.4.0      ✔ purrr   0.3.4
✔ tibble  3.1.8      ✔ dplyr   1.0.10
✔ tidyr   1.2.0      ✔ stringr 1.4.1
✔ readr   2.1.2      ✔ forcats 0.5.1
── Conflicts ────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()

Comme le montre la sortie ci-dessus, les packages sont désormais chargés. Le package ggplot2 contient le jeu de données mpg, que nous chargeons maintenant avec la commande suivante :

## Charger les données mpg
data(mpg)

## Afficher les 5 premières lignes
head(mpg)
## A tibble: 6 × 11
  manufacturer model displ  year   cyl trans      drv     cty   hwy fl    class
  <chr>        <chr> <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>
1 audi         a4      1.8  1999     4 auto(l5)   f        18    29 p     compact
2 audi         a4      1.8  1999     4 manual(m5) f        21    29 p     compact
3 audi         a4      2    2008     4 manual(m6) f        20    31 p     compact
4 audi         a4      2    2008     4 auto(av)   f        21    30 p     compact
5 audi         a4      2.8  1999     6 auto(l5)   f        16    26 p     compact
6 audi         a4      2.8  1999     6 manual(m5) f        18    26 p     compact

Fonctions groupées avec group_by()

La fonction group_by() permet d'obliger dplyr à exécuter chaque fonction séparément dans les différents groupes de votre data frame. Nous utiliserons group_by() dans de nombreux exemples pour l'illustrer.

L'opérateur pipe (pipe) : |>

La force de dplyr réside dans la possibilité d'enchaîner des opérations (des étapes). Dans dplyr, nous pouvons exécuter des opérations de manière séquentielle à l'aide du pipe, dont le symbole est |>. Auparavant, %>% était utilisé comme opérateur pipe, mais depuis 2021 il a été remplacé par |>. Le raccourci clavier du pipe est **Cmd+Shift+M** sur Mac et Ctrl + Shift + M sous Windows et Linux.

Le pipe est magique ! Le pipe prend en effet le résultat de chaque opération et le transmet comme premier argument de l'opération suivante. En voici un exemple, commenté ci-dessous :

mpg |>
  select(displ, cty, cyl) |>
  mutate(ny_variabel = displ*cyl)
  • À la ligne 1, nous partons des données mpg, que nous transmettons à la ligne 2 avec |>.
  • À la ligne 2, nous choisissons de conserver trois colonnes : displ, cty et cyl. Le résultat est un nouveau data frame qui ne contient que ces trois variables. Ce data frame est transmis comme premier argument à la ligne 3.
  • À la ligne 3, mutate() est utilisé pour créer la variable ny_variabel, qui est le produit de displ et cyl.

Ainsi, le pipe (|>) sert à enchaîner des opérations avec dplyr.