Chapitre 6 Première manipulation des données
library("dplyr")6.1 Afficher les valeurs et manipuler les variables
Pour afficher la table, plusieurs façons : “clic” dans l’environnement Rstudio,
View(base),print(base),base.Pour accéder à une variable : fonction
pull()
Par exemple :
str(pull(base, DEP))## chr [1:36689] "01" "01" "01" "01" "01" "01" "01" "01" "01" "01" "01" "01" ...
6.2 Créer de nouvelles variables
La fonction mutate() permet de créer/modifier une variable (ou plusieurs).
TableEnSortie <- mutate(TableEnEntree,
NouvelleVariable = DefinitionDeLaVariable)Par exemple :
base <- mutate(base, log_SUPERF = log(SUPERF))Nb : mutate() permet également de modifier une variable. Dans ce cas la syntaxe est la même que ci-dessus, mais les noms d’entrée et de sortie sont les mêmes :
base <- mutate(base, log_SUPERF = 100 * log_SUPERF)\(\Rightarrow\) La table base contient de nouvelles colonnes
6.3 Sélectionner des variables
La fonction select() permet de sélectionner les variables voulues.
- sélection par liste blanche
TableEnSortie <- select(TableEnEntree, Variable1, Variable2, ..., VariableN)- sélection par liste noire (supprimer)
TableEnSortie <- select(TableEnEntree, -Variable1, -Variable2, ..., -VariableN)Par exemple :
base_select <- select(base, CODGEO, LIBGEO, P14_POP)
base_select <- select(base, -CODGEO)6.4 Filtrer des observations
La fonction filter() permet de sélectionner les observations, selon une condition (ou plusieurs).
TableEnSortie <- filter(TableEnEntree, Condition1, ..., ConditionN)Par exemple :
base_filter <- filter(base, DEP == "01" & P14_POP > 10000)\(\Rightarrow\) Attention à l’opérateur de comparaison : ” == ” et non pas “=”
6.5 Les tests logiques dans R
| Syntaxe | Action |
|---|---|
== |
Test d’égalité |
!= |
Différent de |
%in% c(...) |
Dans une liste de valeurs |
>, >= , <, <= |
Supérieur (ou inférieur) (ou égal) |
! (x %in% c(...)) |
N’est pas dans une liste de valeurs |
TableEnSortie <- filter(TableEnEntree, x==a & y==b) # x vaut a **ET** y vaut b
TableEnSortie <- filter(TableEnEntree, x==a | y==b) # x vaut a **OU** y vaut b (barre verticale AltGR+6)6.6 Renommer des colonnes
La fonction rename() permet de renommer une variable (ou plusieurs).
base <- rename(base, nouveau_nom = ancien_nom)Exemple
base_rename <- rename(base, ZONE_EMPLOI = ZE)6.7 Exercice 3 : créer, filtrer, sélectionner
Nous travaillons toujours sur la même table des indicateurs au territoire, “extdata/Base_synth_territoires.csv”.
A- En utilisant la fonction mutate(), créer une nouvelle variable correspondant à la densité de population (rapport de la population P14_POP à la superficie de la commune SUPERF), ainsi que les taux de natalité et de mortalité (en pour mille)
B- A l’aide de la fonction select(), créer une nouvelle table en ne conservant que le code commune, le type de commune (ZAU), la région, le département et les variables que vous venez de créer.
C-Enfin, ne conserver les communes correspondant à votre département de naissance et stocker ce dataframe. Attention au type de la variable département !
D- Avec les opérateurs logiques, faire des essais pour sélectionner des échantillons différents.
Résultat attendu :
6.8 Nom d’un pipe %>% !
Pour enchaîner des opérations, on peut créer des variables successives :
df <- mutate(base, densite = P14_POP / SUPERF,
tx_natal = 1000 * NAISD15 / P14_POP,
tx_mort = 1000 * DECESD15 / P14_POP)
selection <- select(df, CODGEO, ZAU, REG, DEP, densite, tx_natal)
filtre_62 <- filter(selection, DEP == "62")Cela peut être relativement clair si on respecte de bonnes pratiques de nommage mais encombre inutilement l’environnement de travail.
On peut emboîter les fonctions :
selection_62 <- filter(select(mutate(base, densite = P14_POP / SUPERF,
tx_natal = 1000 * NAISD15 / P14_POP,
tx_mort = 1000 * DECESD15 / P14_POP),
CODGEO, ZAU, REG, DEP, densite, tx_natal),
DEP == "62")Ce choix préserve l’environnement de travail mais la lecture est particulièrement confuse et le risque d’oubli de parenthèses important.
Il y a enfin une solution du package magrittr faisant partie du tidyverse.
On peut combiner les opérations en une seule ligne à l’aide de l’opérateur pipe %>% :
selection_62 <- base %>%
mutate(densite = P14_POP / SUPERF,
tx_natal = 1000 * NAISD15 / P14_POP,
tx_mort = 1000 * DECESD15 / P14_POP) %>%
select(CODGEO, ZAU, REG, DEP, densite, tx_natal) %>%
filter(DEP == "62")Cette écriture permet d’enchaîner les opérations telles qu’on les décrirait à l’oral. L’objet auquel s’applique chaque nouvelle opération est le résultat de l’opération précédente.