Manipulation des bases de données dataframe

avec tidyverse et dplyr en langage R

L'essentiel de cette page !

Il existe des librairies dédiées à la manipulation des bases de données rectangulaires (tableaux), au format dataframe.

Grâce à ces librairies tidyverse et dplyr, on va pouvoir fusionner des bases de données en fonction d'une clef ou les remodeler selon plusieurs critères.

0- Prenons un jeu de données qui servira d'exemple

Voici 3 tableaux qui décrivent des personnes, parfois les mêmes (tableau 1 et tableau 3), parfois décrivent les groupes auxquels ils appartiennent (tableau 2).

tab1 <- data.frame(Personne = c("Géraldine","Véronique","Serge","Tom"),

Secteur_loc = c("Qualité","IAB","Qualité","IAB"),

Groupe=c("A1","A2","B1","A1"),

France_loc = c("France","France","France","Grèce"),

age = c(18,19,20,56)

)

tab2 <- data.frame(Groupe =c("A1","A2","B1"),Secteur_loc=c("Bon","Mauvais","Bon"))

tab3 <- data.frame(Secteur_loc = c("Qualité","IAB","IAB","IAB"),

Groupe=c("A1","A2","C1","A1"),

poids = c(70,80,65,53),

taille = c(180,170,160,150)

)

Personne Secteur_loc Groupe France_loc age

1 Géraldine Qualité A1 France 18

2 Véronique IAB A2 France 19

3 Serge Qualité B1 France 20

4 Tom IAB A1 Grèce 56

tableau 1

Groupe Résultat

1 A1 Bon

2 A2 Mauvais

3 B1 Bon

tableau 2

Secteur_loc Groupe poids taille

1 Qualité A1 70 180

2 IAB A2 80 170

3 IAB C1 65 160

4 IAB A1 53 150

tableau 3

1- Extraire les données

Ne pas oublier :

library(dplyr)

Filtrer (extraction de données)

Exemple : extraire les données des individus du groupe A1 du tableau 1.

tab1 %>%

filter(Groupe == "A1")

Personne Secteur_loc Groupe France_loc age

1 Géraldine Qualité A1 France 18

2 Tom IAB A1 Grèce 56

Filtrer les données par un mot clef de colonne

Exemple : extraire les données des personnes et des colonnes finissant par "loc".

tab1 %>%

select(Personne, ends_with("loc"))

Personne Secteur_loc France_loc

1 Géraldine Qualité France

2 Véronique IAB France

3 Serge Qualité France

4 Tom IAB Grèce

Faire des calculs avec mutate()

Extraire les individus et une estimation de leur nombre d'années à travailler :

tab1 %>%

mutate(Personne, retraite = 67 - age) %>%

select(Personne:Groupe, retraite)

Personne Secteur_loc Groupe retraite

1 Géraldine Qualité A1 49

2 Véronique IAB A2 48

3 Serge Qualité B1 47

4 Tom IAB A1 11

Trier les données en fonction d'une variable

Exemple : trier les données en fonction de l'âge :

# arrange,

tab1 %>%

arrange(desc(age))

Personne Secteur_loc Groupe France_loc age

1 Tom IAB A1 Grèce 56

2 Serge Qualité B1 France 20

3 Véronique IAB A2 France 19

4 Géraldine Qualité A1 France 18

2- Grouper les données

Comptabiliser, regrouper les valeurs qui répondent à de même critères

Exemple : grouper les valeurs par secteurs existants. On les comptabilise par secteur et on calcule l'âge moyen (si plusieurs âges inférieurs à 40 ans.

tab1 %>%

group_by(Secteur_loc) %>%

summarise(

n = n(),

age = mean(age, na.rm = TRUE)

) %>%

filter(

n > 1,

age < 40

)

# A tibble: 2 x 3

Secteur_loc n age

<chr> <int> <dbl>

1 IAB 2 37.5

2 Qualité 2 19

3- Combiner les tableaux

Trouver des "matchs" des correspondances entre plusieurs tableaux qui répondent aux même critères.

library("dplyr")

merge(tab1, tab3,

by = c("Secteur_loc","Groupe"))

Secteur_loc Groupe Personne France_loc age poids taille

1 IAB A1 Tom Grèce 56 53 150

2 IAB A2 Véronique France 19 80 170

3 Qualité A1 Géraldine France 18 70 180

Lier les bases de données selon un ou plusieurs critères

left_join(tab1,tab2,by="Groupe")

right_join(tab1,tab2,by="Groupe")

Personne Secteur_loc.x Groupe France_loc age Secteur_loc.y

1 Géraldine Qualité A1 France 18 Usine

2 Véronique IAB A2 France 19 Bureau

3 Serge Qualité B1 France 20 Usine

4 Tom IAB A1 Grèce 56 Usine

full_join(tab1,tab3)

Personne Secteur_loc Groupe France_loc age poids taille

1 Géraldine Qualité A1 France 18 70 180

2 Véronique IAB A2 France 19 80 170

3 Serge Qualité B1 France 20 NA NA

4 Tom IAB A1 Grèce 56 53 150

5 <NA> IAB C1 <NA> NA 65 160

4- Aller plus loin...

Voici un document extrait du web qui résume bien des fonctions essentielles de dplyr.

data-transformation.pdf