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).
<- mutate(TableEnEntree,
TableEnSortie NouvelleVariable = DefinitionDeLaVariable)
Par exemple :
<- mutate(base, log_SUPERF = log(SUPERF)) base
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 :
<- mutate(base, log_SUPERF = 100 * log_SUPERF) base
\(\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
<- select(TableEnEntree, Variable1, Variable2, ..., VariableN) TableEnSortie
- sélection par liste noire (supprimer)
<- select(TableEnEntree, -Variable1, -Variable2, ..., -VariableN) TableEnSortie
Par exemple :
<- select(base, CODGEO, LIBGEO, P14_POP)
base_select <- select(base, -CODGEO) base_select
6.4 Filtrer des observations
La fonction filter()
permet de sélectionner les observations, selon une condition (ou plusieurs).
<- filter(TableEnEntree, Condition1, ..., ConditionN) TableEnSortie
Par exemple :
<- filter(base, DEP == "01" & P14_POP > 10000) base_filter
\(\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 |
<- 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) TableEnSortie
6.6 Renommer des colonnes
La fonction rename()
permet de renommer une variable (ou plusieurs).
<- rename(base, nouveau_nom = ancien_nom) base
Exemple
<- rename(base, ZONE_EMPLOI = ZE) base_rename
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 :
<- mutate(base, densite = P14_POP / SUPERF,
df tx_natal = 1000 * NAISD15 / P14_POP,
tx_mort = 1000 * DECESD15 / P14_POP)
<- select(df, CODGEO, ZAU, REG, DEP, densite, tx_natal)
selection <- filter(selection, DEP == "62") filtre_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 :
<- filter(select(mutate(base, densite = P14_POP / SUPERF,
selection_62 tx_natal = 1000 * NAISD15 / P14_POP,
tx_mort = 1000 * DECESD15 / P14_POP),
CODGEO, ZAU, REG, DEP, densite, tx_natal), == "62") DEP
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 %>%
:
<- base %>%
selection_62 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.