3 Recoder des variables quantitatives
De la même manière que l’on peut recoder des variables qualitatives, on peut découper des variables quantitatives en groupe, par exemple si l’on souhaite regrouper tous les individus entre 18-25 ans,…
Pour cette opération, nous utilisons la fonction cut
qui permet de donner soit un nombre de classe, soit des vecteurs de tranche numérique, par exemple c(0, 18, 25, ...)
## n % val%
## (17.9,29.2] 368 18.4 18.4
## (29.2,40.4] 490 24.5 24.5
## (40.4,51.6] 488 24.4 24.4
## (51.6,62.8] 371 18.6 18.6
## (62.8,74.1] 283 14.1 14.1
On peut essayer la même fonction en assignant un vecteur avec nos classes d’âge :
## n % val%
## (0,18] 8 0.4 0.4
## (18,25] 205 10.2 10.2
## (25,40] 645 32.2 32.2
## (40,60] 803 40.2 40.2
## (60,80] 339 17.0 17.0
On remarque que contrairement aux fonctions que nous avons utilisé avant, nous ne donnons pas qu’un seul argument à la fonction cut()
. En effet, la très grande majorité des fonctions prennent plusieurs arguments, pour ajouter des options dans le traitement des données. Ici, c’est l’argument breaks
qui est utilisé. On le retrouve également dans les fonctions permettant de créer des graphiques d’histogramme par exemple.
On remarque également que nous avons créé une nouvelle variable AGEclasse
, sans que R ne bronche. On peut créer de nouvelles variables dans un tableau assez simplement, et c’est recommandé pour ne pas perdre les informations existantes.
Si l’on souhaite créer un nouveau tableau avec les variables transformées, il est conseillé de créer un nouvelle objet qui reprend le même tableau. Voici un exemple de manipulation qui peuvent être réalisées
df <- openxlsx::read.xlsx("../Sources/vico2020.xlsx", colNames = TRUE)
df$AGEclasse <- df$AGEclasse <- cut(df$AGE, breaks = c(0, 18, 25, 40, 60, 80))
df$Sexe_reco <- df$SEXE <- case_when(
df$SEXE == "Un homme" & df$AGE > 60 ~ "H+60",
df$SEXE == "Une femme" & df$AGE > 60 ~ "F+60",
df$SEXE == "Un homme" ~ "H-60",
df$SEXE == "Une femme" ~ "f-60",
TRUE ~ "Autre"
)
df2 <- df[c("AGEclasse", "Sexe_reco")]
head(df2)
AGEclasse | Sexe_reco |
---|---|
(25,40] | f-60 |
(25,40] | f-60 |
(18,25] | f-60 |
(40,60] | f-60 |
(40,60] | f-60 |
(25,40] | H-60 |
3.0.0.1 Renommer des variables
On peut très facilement renommer des variables avec R, en utilisant notamment la fonction rename()
du tidyverse.
Il faut assez simplement fournir plusieurs informations à la fonction :
df <- rename(df,
'POLITIQUE' = 'POL',
'Niveau_de_diplôme' = 'DIPLONIV')
c('POL', 'Niveau_de_diplôme') %in% names(df)
## [1] FALSE TRUE
On voit que la syntaxe est un peu particulière puisqu’elle prend la forme nouveau_nom = ancien_nom
.
Nous utilisons également l’opérateur %in%
qui permet de tester si un des éléments de notre vecteur à gauche de l’expression est présent dans le vecteur (ou l’objet) à droite de l’expression. Ce test nous renvoit des valeurs “vrai” ou “faux” qui permettent de tester et de sélectionner de l’information.
3.1 Tests et condition
Toutes les sélections fondées sur des tests de conditions fonctionnent de cette manière : si l’on regarde en détails les sorties de cette opération :
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
Les résultats sont un vecteur de la même longueur avec des résultats vrais ou faux. c’est avec ces vecteurs de type logical
, qu’on appelle également booléens dans d’autres langages informatiques, que l’on peut sélectionner de l’information :
test <- c(rep(TRUE,length(df$AGE)/2), rep(FALSE,length(df$AGE)/2)) ### On créer des TRUE et des FALSE de la longueur de notre tableau
test <- test[sample(1:length(test))] ### On ditribue aléatoirement les TRUE et les FALSE
df$AGE[test][1:100] ### On regard les 100 premières valeurs de df$AGE qui correspondent au test
## [1] 30 35 35 21 64 74 20 34 20 22 48 26 45 32 19 28 66 38 46 49 59 58 49 43 35
## [26] 63 38 72 52 53 68 20 26 37 45 25 48 46 36 53 26 61 26 51 24 25 35 51 51 24
## [51] 51 53 44 68 31 29 47 64 35 50 45 32 52 59 22 38 49 56 61 57 23 40 65 36 46
## [76] 29 40 26 45 32 48 50 26 36 54 46 46 39 70 46 42 23 50 54 60 49 48 47 68 50
## [1] 30 30 24 45 57 35 35 36 21 64 59 55 74 26 68 20 26 53 47 34 20 41 22 39 48
## [26] 49 33 26 26 45 32 19 21 28 56 70 66 38 46 45 73 49 25 39 59 58 49 43 67 35
## [51] 20 63 38 38 72 55 59 51 52 53 68 20 26 37 25 32 45 25 48 33 24 29 46 53 36
## [76] 69 53 67 26 61 48 34 26 51 24 25 45 74 34 63 45 35 44 51 51 46 38 24 69 69
## [1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [61] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE
## [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [97] FALSE FALSE FALSE FALSE
C’est de cette manière que l’on peut sélectionne de l’information “manuellement”. Nous verrons plus tard comment fonctionne le tidyverse
, et en particulier les fonctions du dplyr
.
3.2 Exercices
3.2.0.1 On souhaite a présent recoder la variable numérique RESNB
en catégorie. Recodez la variable tel qu’il existe des groupes de 1, 2, 3 à 5 et plus de 5 personnes.
n | % | val% | |
---|---|---|---|
(0,1] | 438 | 21.9 | 21.9 |
(1,2] | 668 | 33.4 | 33.4 |
(2,5] | 873 | 43.6 | 43.6 |
(5,13] | 21 | 1.0 | 1.0 |
3.2.0.2 Renommez ensuite les catégories en seul
, couple
, famille
, grande_famille
n | % | val% | |
---|---|---|---|
seul | 438 | 21.9 | 21.9 |
couple | 668 | 33.4 | 33.4 |
famille | 873 | 43.6 | 43.6 |
grande_famille | 21 | 1.0 | 1.0 |
Renommez la variable RESNB_reco
en Type_RES
## [1] "ID" "SEXE" "AGE"
## [4] "SITCONJ" "RESNB" "RESISOL"
## [7] "LOGAUTRE" "MASQUE" "TEMPS"
## [10] "INQUIET" "VOISINS" "CONTROL"
## [13] "AMIS" "FAMILLE" "POLITIQUE"
## [16] "Niveau_de_diplôme" "SITPROF_rec" "PCS_rec6"
## [19] "REV" "POIDS_init" "AGEclasse"
## [22] "Sexe_reco" "Type_RES"
On souhaite maintenant créer une nouvelle variable pour observer le port du masque en fonction du Sexe qu’on appellera MASQUE_SEXE
.
Proposez un recodage pour cette variable.
## n % val%
## F_masque 766 38.3 38.3
## F_non 696 34.8 34.8
## H_non 315 15.8 15.8
## H_masque 223 11.2 11.2
n | % | val% | |
---|---|---|---|
F_masque | 766 | 38.3 | 38.3 |
F_non | 696 | 34.8 | 34.8 |
H_non | 315 | 15.8 | 15.8 |
H_masque | 223 | 11.2 | 11.2 |