Initiation à la manipulation de données avec le package dplyr

manipulation data package dplyr

La semaine dernière, je discutais avec un étudiant qui débute dans l’analyse de données avec R. Il devait manipuler un tableau de données (on appelle cela un data frame en R), plus précisément il avait besoin de sélectionner certaines lignes, créer de nouvelles variables, calculer des moyennes, etc…

Il avait réussi à faire la plupart de ces tâches, mais avec beaucoup de difficultés, parce qu’il avait eu du mal à identifier les fonctions R nécessaires, puis à les utiliser. Quand je lui ai parlé du package dplyr, il m’a dit qu’il le connaissait très mal, et qu’il ne s’était pas rendu compte qu’il aurait pu l’utiliser. J’ai trouvé cela dommage parce qu’il est facile d’acquérir les bases de la manipulation de data frame avec le package dplyr. Mais aussi parce que ce package est vraiment puissant, notamment grâce à des fonctions complémentaires des fonctions dont je vais parler dans cet article, et que vous pourrez apprendre à utiliser dans un second temps.

 

1. Le package dplyr

Comme le package “ggplot2”, le package “dplyr” fait parti du super package tidyverse. Vous pouvez donc le charger individuellement, ou par l’intermédiaire de ce super package tidyverse :

 

Les principales fonctions à connaître pour débuter dans la manipulation
de données sont :

  • filter() : pour sélectionner des lignes,
  • select() : pour sélectionner des colonnes,
  • mutate() : pour créer des variables,
  • summarise() : pour résumer des données, en calculant des paramètres descriptifs,
  • group_by() : pour regrouper les données (avant de calculer un paramètre descriptif par exemple).

Ces cinq fonctions peuvent s’utiliser les unes après les autres, en utilisant le symbole “%>%” (pipe en anglais), que l’on pourrait traduire par “et puis”.

Le package dispose d’une cheat sheet que vous pouvez télécharger à partir de R Studio et de l’onglet Help –> Cheatsheets –> Data Transformation with dplyr.

package dplyr manipulation

 

2. Les data

Je vais illustrer chacune des fonctions citées précédemment avec un exemple, en employant le jeu de données “iris”, qui appartient au package “dataset”, chargé par défaut à chaque ouverture de session.

Le jeu de données “iris” comporte quatre variables numériques (“Sepal.Length” “Sepal.Width” “Petal.Length” “Petal.Width” ), et une variable catégorielle (Species). Voici les 6 premières lignes du jeu de données :

 

 

La nature des données (numérique / catégorielle) est fournie par la sortie de la fonction str() (qui veut dire structure).

 

3 Sélection de lignes avec la fonction filter()

 3.1 En fonction d’un seul critère

Le jeu de données iris comporte trois espèces d’iris différentes : “setosa”, “versicolor”, et “virginica”. Si je souhaite n’afficher que les données de l’espèce versicolor, alors, je vais filtrer les lignes correspondant à cette espèce, en utilisant la fonction filter() :

 

Si je souhaite constituer un jeu de données avec ce sous-groupe de données correspondant à l’espèce versicolor, je vais simplement réaliser une assignation en amont du filtrage en utilisant “iris_versicolor <-” .

NB : “iris_versicolor” est simplement un nom que j’ai donné, vous pouvez utiliser “toto” si vous préférez 😉

 

 3.2 En fonction d’un double critère

Imaginons maintenant que je souhaite sélectionner les lignes correspondant à une valeur de Sepal.Length < 5.8 ET une valeur de Petal.Length > 3.8. Pour cela j’utilise le signe “&”, comme ceci :

 

Pour sélectionner les lignes ayant une valeur de Sepal.Length < 5.8 OU une valeur de Petal.Length < 1.6, on utilise le symbole | (avec les touches ALT GR + 6) :

 

3.3 En fonction de multiples critères de type catégoriel

Si je souhaite filtrer les lignes en fonction de plusieurs modalités d’une variable catégorielle, j’utilise le symbole %in%, suivi du vecteur, comme ceci :

 

3.4 En enchaînant les filtrages

Il est également possible de réaliser plusieurs filtres successivement :

 

Remarque : si R vous renvoie un message d’erreur, il se peut qu’il existe un conflit entre la fonction “filter()” du package dplyr et la fonction filter() du package stats. Dans ce cas, il suffit d’indiquer qu’il s’agit d’utiliser la fonction du package “dplyr” en utilisant la synthaxe dplyr::filter, comme ceci :

Il existe d’autres possibilités pour filtrer les lignes d’un jeu de données avec le package dplyr. Pour en apprendre davantage, je vous recommande l’article “Data Wrangling Part 3: Basic and more advanced ways to filter rows“.

 

4. Sélection des variables(colonnes) avec la fonction select()

4.1 En indiquant les variables à conserver

Par exemple, ici, je créé un data frame “iris_length” qui ne contient que les variables Sepal.Length et Petal.Length. Pour cela, j’indique ces deux variables en argument de la fonction select() :

 

4.2 En indiquant les variables à supprimer

Parfois, on peut avoir besoin de seulement supprimer ou plusieurs variables. Par exemple, ici, si je souhaite retirer la variable “Species” j’utilise le symbole “-“, comme ceci :

 

Remarque : on peut sélectionner des variables contiguës en utilisant le symbole “:”. Par exemple ici, je souhaite garder les variables allant de “Sepal.Length” à “Petal.Width”.

 

 4.3 En fonction du nom des variables

On peut, par exemple, choisir de sélectionner les variables en fonction de leur nom. Pour cela, on utilise les fonctions starts_with() ou ends_with(). Cela est très pratique puisque ça évite d’indiquer toutes les variables individuellement.

 

De même, avec ends_with() :

 

 4.4 En fonction du type de données

On peut encore sélectionner les variables en fonction de leur nature (numérique ou catégorielle). Pour cela, on utilise notamment la fonction select_if() en combinaison avec les fonction is.numeric(), ou is.factor().

 

On voit ici que la variable Species qui est de type catégoriel (ou factor) n’a pas été sélectionné.

Il existe d’autres possibilités de sélection ou de dé-sélection des variables avec le package dplyr. Pour en apprendre davantage, je vous recommande l’article “Data Wrangling Part 1: Basic to Advanced Ways to Select Columns“.

 

5 Créer une nouvelle variable avec la fonction mutate()

Le package dplyr permet de créer facilement une nouvelle variable avec la fonction mutate(). Par exemple, ici, je crée une nouvelle variable, nommée “new_var” qui est le produit des variables “Sepal.Length” et “Sepal.Width”.

 

6 Résumer des données avec la fonction summarise()

6.1 Selon une seule variable

Par exemple, ici, je calcule la moyenne de la variable Sepal.Length, que  j’appelle avg :

 

Il est possible d’utiliser des fonctions :

  • de positions : mean(), median(), min(), max(), quantile(),
  • de dispersion: sd(), IQR(), mad(),
  • retournant des valeurs en fonction d’un indice: first(), last(), nth(),
  • de comptage n(), n_distinct(),
  • logique: any(), all()

 

6.2 Selon plusieurs variables

Pour obtenir l’écart type de toutes les variables numériques, on utilise la fonction summarise_all():

 

Il existe encore deux variantes de la fonction summarise, avec les fonctions summarise_if() et summarise_at(). Voici un exemple qui permet d’obtenir la même chose que le code précédent :

 

Vous trouverez davantage d’information sur leur utilisation dans l’article “Data Wrangling Part 4: Summarizing and slicing your data” de Suzan Baert .

 

7. La fonction group_by()

Cette fonction est très utile pour calculer des paramètres sur des groupes de données. Par exemple si je veux obtenir la médiane de la variable Sepal.Length pour les trois espèces d’iris :

 

Ou encore :

 

8. Autres fonctions utiles

Parmi les autres fonctions que contient la package dplyr, j’utilise aussi très souvent les fonctions rename() pour renommer les variables, et arrange(), pour ordonner les données :

8.1 La fonction rename()

 

 

8.2 La fonction arrange()

Par exemple, si je veux ordonner le jeu de données “iris” par valeur croissante de Sepal.Length :

 

La fonction slice() permet d’afficher directement le nombre de lignes désiré.

Pour ordonner dans le sens décroissant, on utilise la fonction desc() dans la fonction arrange() :

 

8.3 D’autres fonctions

De façon plus ou moins fréquente, j’utilise encore des fonctions pour fusionner des tableaux :

  • lef_join(),
  • right_join(),
  • inner_join(),
  • full_join(),
  • bind_rows(),
  • intersect(),
  • setdiff(),
  • union().

 

Conclusion :

J’espère que ce petit article d’introduction à la manipulation des données sous R vous aura, à la fois, convaincu de la facilité d’utilisation du package dplyr et de ses grandes possibilités.

J’espère aussi que cet article permettra, à ceux qui n’utilisent pas encore ce package, de franchir le pas. A mon sens, lorsqu’on fait de l’analyse de données avec R, il est tout aussi important de savoir utiliser le package dplyr que le package ggplot2.

Pour celles et ceux qui veulent en apprendre encore davantage , vous trouverez d’autres exemple, en français, dans le document “Introduction à R et au tidyverse” de Julien Barnier, ou encore dans cet article de ThinkR.

Et si cet article vous a plu, partagez le 😉

Crédits photos : SarahRichterArt

 

 

Continuez votre lecture :

Partager l'article
  •  
  •  
  •  
  •  
  •  
    7
    Partages
  • 7
  •  
  •  
  •  
  •  

2 commentaires

  1. Abdelaziz Répondre

    Bjr Madame :
    Mes meilleures félicitations pour ce que vous faites (vos articles relatifs à R).
    Les statistiques sont une discipline très demandées pour tous les domaines :
     Biologie
     Médecine
     Agronomie et Agro-industrie
     Agriculture
     Les Nouvelles Technologies
     L’industrie ….
    Je suis un Ingénieur Agronome, j’apprécie beaucoup vos articles sur les capacités du logiciel R.
    Ainsi, j’ai une demande auprès de vous :
    Un article sur le Modèle de Régression Linéaire Multiple, avec un exemple clair
    (Tout le Process)
    Mes respects
    Merci.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *