Ce chapitre est en cours d’écriture.

Pour une introduction à dplyr en anglais, voir la vignette officielle : https://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html. On pourra également se référer à https://rpubs.com/justmarkham/dplyr-tutorial.

Les tibbles

L’extension tibble permet d’étendre les data.frame en améliorant la manière dont les tableaux sont affichés dans la console et ayant un comportement plus uniforme concernant les noms de colonnes et la manière d’extraire des éléments avec les crochets simples et doubles.

Voir https://cran.r-project.org/web/packages/tibble/vignettes/tibble.html pour plus de détails.

Cela ne modifie pas radicalement les tableaux de données, mais lorsque l’on travail avec dplyr, il est préférable de convertir ses tableaux de données en tibble ce qui se fait aisément avec la fonction tbl_df fournie avec dplyr.

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
iris2 <- tbl_df(iris)
class(iris2)
[1] "tbl_df"     "tbl"        "data.frame"

Comme on le voit, cela ajoute plusieurs classes additionnelles au tableau de données, celui-ci restant malgré tout toujours un data.frame.

dplyr et tibble propose également une petite fonction bien pratique pour jeter un coup d’oeil à ses données : glimpse.

glimpse(iris2)
Observations: 150
Variables: 5
$ Sepal.Length <dbl> 5.1, 4.9, 4.7, 4.6, 5.0,...
$ Sepal.Width  <dbl> 3.5, 3.0, 3.2, 3.1, 3.6,...
$ Petal.Length <dbl> 1.4, 1.4, 1.3, 1.5, 1.4,...
$ Petal.Width  <dbl> 0.2, 0.2, 0.2, 0.2, 0.2,...
$ Species      <fctr> setosa, setosa, setosa,...

Il faut également noter que le format tibble est celui dans lequel les données sont importées lorsque l’on utilise les fonctions d’import des extensions readr, haven et readxl (voir le chapitre Import de données).

dplyr et data.table

Pour ceux travaillant également avec l’extension data.table, il est possible de concilier tibble et data.table avec l’extension dtplyr et sa fonction tbl_dt.

library(dtplyr)
iris_dt <- tbl_dt(iris)
class(iris_dt)
[1] "tbl_dt"     "tbl"        "data.table"
[4] "data.frame"

Le tableau de données est à la fois compatible avec data.table (et notamment sa syntaxe particulière des crochets) et les verbes de dplyr.

Principaux verbes

dplyr est construit autour de fonctions nommées selon des verbes anglais. Chaque verbe prends comme premier argument un tableau de données, les options étant indiquées à la suite. Chacune de ces fonctions renvoie à son tour un tableau de données.

  • filter pour sélectionner des observation selon une condition
  • slice pour sélectionner des observations selon leur position
  • arrange pour trier les observations
  • select pour sélectionner des variables
  • rename pour renommer des variables
  • distinct pour ne retenir que les observations distinctes (et donc éliminer les doublons)
  • mutate pour créer de nouvelles variables
  • summarise pour résumer des des valeurs multiples en une seule (par exemple, avec une moyenne)
  • group_by pour exécuter les opérations par groupe
  • sample_n et sample_frac pour sélectionner un sous-échantillon aléatoire

On notera que les verbes de dplyr accepte une syntaxe assez libre, puisque que les noms de variables sont interprétés dans leur contexte : il n’est donc pas nécessaire de les entourer de guillemets.

Enchaîner les opérations

dplyr importe automatiquement l’opérateur %>% fourni par l’extension magrittr. Cela permet d’enchaîner facilement les verbes de dplyr. Cet opérateur ne fonctionne essentiellement qu’avec des fonctions dont le premier argument est un tableau de données et qui renvoient un tableau de données.

iris %>% group_by(Species) %>% summarise(mean.sepal.width = mean(Sepal.Width, 
  na.rm = TRUE), mean.sepal.length = mean(Sepal.Length, 
  na.rm = TRUE)) %>% filter(mean.sepal.width < 3)
# A tibble: 2 × 3
     Species mean.sepal.width mean.sepal.length
      <fctr>            <dbl>             <dbl>
1 versicolor            2.770             5.936
2  virginica            2.974             6.588

%<>% permet quant à lui de renvoyer le résultat final dans le premier objet appelé. C’est une manière plus courte d’écrire une commande comme la suivante :

iris <- iris %>% mutate(Sepal.Area = Sepal.Length * 
  Sepal.Width)

en

library(magrittr)
iris %<>% mutate(Sepal.Area = Sepal.Length * Sepal.Width)

De manière plus générique, some_object %<>% foo %>% bar est équivalent à some_object <- some_object %>% foo %>% bar.

Pour plus de détails, voir https://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html.