-
Notifications
You must be signed in to change notification settings - Fork 7
/
06-manip.Rmd
149 lines (109 loc) · 4.44 KB
/
06-manip.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# Première manipulation des données
```{r manip}
library("dplyr")
```
## 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 :
```{r}
str(pull(base, DEP))
```
## Créer de nouvelles variables
<center>![](images/mutate.png)</center>
La fonction `mutate()` permet de créer/modifier une variable (ou plusieurs).
```{r, eval = FALSE}
TableEnSortie <- mutate(TableEnEntree,
NouvelleVariable = DefinitionDeLaVariable)
```
Par exemple :
```{r}
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 :
```{r}
base <- mutate(base, log_SUPERF = 100 * log_SUPERF)
```
$\Rightarrow$ La table base contient de nouvelles colonnes
## Sélectionner des variables
<center>![](images/select.png)</center>
La fonction `select()` permet de sélectionner les variables voulues.
- sélection par liste blanche
```{r, eval=FALSE}
TableEnSortie <- select(TableEnEntree, Variable1, Variable2, ..., VariableN)
```
- sélection par liste noire (supprimer)
```{r, eval=FALSE}
TableEnSortie <- select(TableEnEntree, -Variable1, -Variable2, ..., -VariableN)
```
Par exemple :
```{r}
base_select <- select(base, CODGEO, LIBGEO, P14_POP)
base_select <- select(base, -CODGEO)
```
## Filtrer des observations
<center>![](images/filter.png)</center>
La fonction `filter()` permet de sélectionner les observations, selon une condition (ou plusieurs).
```{r, eval=FALSE}
TableEnSortie <- filter(TableEnEntree, Condition1, ..., ConditionN)
```
Par exemple :
```{r}
base_filter <- filter(base, DEP == "01" & P14_POP > 10000)
```
>**$\Rightarrow$ Attention à l’opérateur de comparaison : " == " et non pas "="**
## 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
```{r, eval=FALSE}
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)
```
## Renommer des colonnes
La fonction `rename()` permet de renommer une variable (ou plusieurs).
```{r, eval = FALSE}
base <- rename(base, nouveau_nom = ancien_nom)
```
Exemple
```{r}
base_rename <- rename(base, ZONE_EMPLOI = ZE)
```
## Exercice 3 : créer, filtrer, sélectionner
```{r mod1_exo3, child=charge_exo("m1", "exo3.rmd"), echo=FALSE}
```
## Nom d'un pipe `%>%` !
Pour enchaîner des opérations, on peut créer des variables successives :
```{r}
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 :
```{r}
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 `%>%` :
```{r}
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.