x <- 3
x <- x + 1
x
chien <- c("Chihuahua", 5)
chien
y <- c(10, 20, NA, 40)
mean(y)
mean(y, na.rm = TRUE)
z <- 7
z > 5 & z < 10Découvrir un tableau de données
L3 économie-finance
Reprise du chapitre 1
Avant de commencer, vérifiez que les notions du chapitre 1 sont acquises. Prenez une feuille et, sans lancer R, écrivez pour chaque ligne ce que R va afficher. Ne regardez la correction qu’une fois toutes vos réponses écrites : c’est l’effort de prédiction qui est utile, pas la lecture de la réponse.
x <- 3
x <- x + 1
x[1] 4
chien <- c("Chihuahua", 5)
chien[1] "Chihuahua" "5"
y <- c(10, 20, NA, 40)
mean(y)[1] NA
mean(y, na.rm = TRUE)[1] 23.33333
z <- 7
z > 5 & z < 10[1] TRUE
Deux pièges classiques se cachent dans cet exercice. D’abord, x <- x + 1 calcule x + 1 avec l’ancienne valeur de x, puis range le résultat dans x : l’ancienne valeur est écrasée. Ensuite, mélanger du texte et un nombre dans c() convertit tout en texte, sans prévenir : le 5 est devenu "5".
Si vous vous êtes trompés sur une ligne, relisez la partie correspondante du chapitre 1 avant d’aller plus loin.
Du vecteur au tableau
Où nous en sommes
Au chapitre précédent, vous avez manipulé des vecteurs : des suites de valeurs de même type.
tailles <- c(156, 164, 197, 147, 173)
mean(tailles)[1] 167.4
De vraies données ne se présentent jamais ainsi. Elles arrivent sous forme de tableau, avec des lignes, qui correspondent aux individus ou aux observations, et des colonnes, qui correspondent aux variables. Chaque colonne d’un tableau est un vecteur : tout ce que vous avez appris au chapitre précédent s’applique.
Dans ce chapitre, nous allons charger un vrai jeu de données d’enquête, apprendre à le regarder avant de faire le moindre calcul, puis voir quatre opérations : choisir des colonnes, choisir des lignes, trier et créer une variable. Ces quatre opérations couvrent la très grande majorité du travail de préparation des données.
Un outil dédié : le tidyverse
On peut manipuler des tableaux avec les seuls outils de base de R, mais c’est verbeux et peu lisible. Le tidyverse est un ensemble de paquets conçus pour travailler sur des tableaux, avec une syntaxe cohérente. C’est lui que nous utiliserons dans toute la suite du cours.
Installez-le une fois, puis chargez-le en haut de votre script :
install.packages("tidyverse")
library(tidyverse)L’installation peut prendre plusieurs minutes : le tidyverse rassemble de nombreux paquets.
tidyverse n’est pas un paquet comme les autres mais une collection : dplyr pour manipuler les tableaux, ggplot2 pour les graphiques, tidyr pour les réorganiser, et quelques autres. Un seul library(tidyverse) les charge tous.
Nos données
Nous travaillerons sur l’enquête Histoire de vie réalisée par l’INSEE en 2003 : 2000 personnes y ont été interrogées sur leurs conditions de vie, leur travail et leurs loisirs. Une partie de l’enquête est disponible dans le paquet questionr, que vous avez installé au chapitre 1. On charge le paquet, puis les données, avec la fonction data() :
library(questionr)
data(hdv2003)Un objet hdv2003 apparaît alors dans l’onglet Environment de RStudio, en haut à droite. C’est ce jeu de données qui nous accompagnera jusqu’à la fin du cours.
Regarder avant de calculer
Un tableau lisible
Commençons par convertir le tableau en tibble, la forme de tableau utilisée par le tidyverse, et rangeons-le dans un objet d, plus court à taper :
d <- as_tibble(hdv2003)
d# A tibble: 2,000 × 20
id age sexe nivetud poids occup qualif freres.soeurs clso relig
<int> <int> <fct> <fct> <dbl> <fct> <fct> <int> <fct> <fct>
1 1 28 Femme Enseignement… 2634. Exer… Emplo… 8 Oui Ni c…
2 2 23 Femme <NA> 9738. Etud… <NA> 2 Oui Ni c…
3 3 59 Homme Derniere ann… 3994. Exer… Techn… 2 Non Ni c…
4 4 34 Homme Enseignement… 5732. Exer… Techn… 1 Non Appa…
5 5 71 Femme Derniere ann… 4329. Retr… Emplo… 0 Oui Prat…
6 6 35 Femme Enseignement… 8675. Exer… Emplo… 5 Non Ni c…
7 7 60 Femme Derniere ann… 6166. Au f… Ouvri… 1 Oui Appa…
8 8 47 Homme Enseignement… 12892. Exer… Ouvri… 5 Non Ni c…
9 9 20 Femme <NA> 7809. Etud… <NA> 4 Oui Appa…
10 10 28 Homme Enseignement… 2277. Exer… Autre 2 Non Prat…
# ℹ 1,990 more rows
# ℹ 10 more variables: trav.imp <fct>, trav.satisf <fct>, hard.rock <fct>,
# lecture.bd <fct>, peche.chasse <fct>, cuisine <fct>, bricol <fct>,
# cinema <fct>, sport <fct>, heures.tv <dbl>
Un tibble s’affiche de façon compacte. La première ligne indique ses dimensions : 2000 lignes et 20 colonnes. Viennent ensuite les dix premières lignes, avec sous le nom de chaque colonne son type entre chevrons, et enfin le nombre de lignes et de colonnes qui n’ont pas pu être affichées. Si vous tapez hdv2003 sans conversion, R essaie au contraire d’afficher tout le tableau, et la console devient illisible.
Dimensions et noms des variables
Un tableau est un objet comme un autre : on peut lui appliquer des fonctions. nrow() donne le nombre de lignes, ncol() le nombre de colonnes, et dim() les deux à la fois :
nrow(d)[1] 2000
ncol(d)[1] 20
dim(d)[1] 2000 20
names() donne la liste des variables :
names(d) [1] "id" "age" "sexe" "nivetud"
[5] "poids" "occup" "qualif" "freres.soeurs"
[9] "clso" "relig" "trav.imp" "trav.satisf"
[13] "hard.rock" "lecture.bd" "peche.chasse" "cuisine"
[17] "bricol" "cinema" "sport" "heures.tv"
Un aperçu complet
glimpse() affiche, pour chaque variable, son type et ses premières valeurs. C’est la commande à taper en premier devant un tableau que vous ne connaissez pas.
glimpse(d)Rows: 2,000
Columns: 20
$ id <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1…
$ age <int> 28, 23, 59, 34, 71, 35, 60, 47, 20, 28, 65, 47, 63, 67, …
$ sexe <fct> Femme, Femme, Homme, Homme, Femme, Femme, Femme, Homme, …
$ nivetud <fct> "Enseignement superieur y compris technique superieur", …
$ poids <dbl> 2634.3982, 9738.3958, 3994.1025, 5731.6615, 4329.0940, 8…
$ occup <fct> "Exerce une profession", "Etudiant, eleve", "Exerce une …
$ qualif <fct> Employe, NA, Technicien, Technicien, Employe, Employe, O…
$ freres.soeurs <int> 8, 2, 2, 1, 0, 5, 1, 5, 4, 2, 3, 4, 1, 5, 2, 3, 4, 0, 2,…
$ clso <fct> Oui, Oui, Non, Non, Oui, Non, Oui, Non, Oui, Non, Oui, O…
$ relig <fct> Ni croyance ni appartenance, Ni croyance ni appartenance…
$ trav.imp <fct> Peu important, NA, Aussi important que le reste, Moins i…
$ trav.satisf <fct> Insatisfaction, NA, Equilibre, Satisfaction, NA, Equilib…
$ hard.rock <fct> Non, Non, Non, Non, Non, Non, Non, Non, Non, Non, Non, N…
$ lecture.bd <fct> Non, Non, Non, Non, Non, Non, Non, Non, Non, Non, Non, N…
$ peche.chasse <fct> Non, Non, Non, Non, Non, Non, Oui, Oui, Non, Non, Non, N…
$ cuisine <fct> Oui, Non, Non, Oui, Non, Non, Oui, Oui, Non, Non, Oui, N…
$ bricol <fct> Non, Non, Non, Oui, Non, Non, Non, Oui, Non, Non, Oui, O…
$ cinema <fct> Non, Oui, Non, Oui, Non, Oui, Non, Non, Oui, Oui, Oui, N…
$ sport <fct> Non, Oui, Oui, Oui, Non, Oui, Non, Non, Non, Oui, Non, O…
$ heures.tv <dbl> 0.0, 1.0, 0.0, 2.0, 3.0, 2.0, 2.9, 1.0, 2.0, 2.0, 1.0, 0…
Les types de variables
Vous voyez apparaître plusieurs types. <int> (entier) et <dbl> (nombre décimal) désignent des nombres : ce sont les variables quantitatives, comme l’âge ou le nombre d’heures passées devant la télévision. <fct> désigne un facteur : c’est ainsi que R stocke une variable qualitative, qui ne peut prendre qu’un nombre limité de valeurs, appelées modalités.
levels() donne la liste des modalités d’un facteur :
levels(d$qualif)[1] "Ouvrier specialise" "Ouvrier qualifie"
[3] "Technicien" "Profession intermediaire"
[5] "Cadre" "Employe"
[7] "Autre"
L’opérateur $ désigne une colonne du tableau : d$qualif est le vecteur des qualifications des 2000 enquêtés.
Remarquez que les modalités sont écrites sans accents ("Employe", "Ouvrier qualifie"). Quand vous sélectionnerez des lignes selon une modalité, il faudra l’écrire exactement comme R l’affiche, majuscules comprises : sinon, R ne trouvera aucune ligne, et ne vous dira rien.
Exercice 1
Ouvrez le tableau dans la visionneuse de RStudio, qui l’affiche comme un tableur :
View(d)Puis, dans un script, en écrivant vos réponses en commentaire :
- Combien y a-t-il d’observations ? de variables ?
- Citez trois variables quantitatives et trois variables qualitatives.
- Quelles sont les modalités de la variable
relig? - Voyez-vous des valeurs manquantes ? Dans quelles variables ?
Ne calculez rien pour l’instant : le but est de faire connaissance avec les données.
dim(d)[1] 2000 20
levels(d$relig)[1] "Pratiquant regulier" "Pratiquant occasionnel"
[3] "Appartenance sans pratique" "Ni croyance ni appartenance"
[5] "Rejet" "NSP ou NVPR"
- Le tableau compte 2000 observations (les enquêtés) et 20 variables.
- Les variables quantitatives sont
age,freres.soeursetheures.tv. Les variablesidetpoidssont aussi des nombres, mais ce ne sont pas des variables à analyser :idest un identifiant, etpoidsest le poids statistique de chaque enquêté dans l’enquête, pas son poids en kilos. Parmi les variables qualitatives :sexe,nivetud,qualif,relig,sport, et toutes les variables de loisirs. - Les modalités de
religsont affichées ci-dessus. - Dans la visionneuse, les valeurs manquantes apparaissent en grisé sous la forme
NA. On en trouve dansnivetud,qualif,trav.imp,trav.satisfetheures.tv. Vous apprendrez à les compter au chapitre 3.
Le tuyau
Le tidyverse s’utilise avec un opérateur particulier, le tuyau (pipe en anglais), qui s’écrit |>. Il prend ce qui se trouve à sa gauche et le passe comme premier argument à la fonction qui se trouve à sa droite. Les deux écritures suivantes sont donc équivalentes :
mean(tailles)
tailles |> mean()Lisez |> comme « ensuite » : « prends tailles, ensuite calcule la moyenne ». Sur un exemple aussi simple, le tuyau n’apporte rien. Son intérêt apparaîtra dans un instant, quand nous enchaînerons plusieurs opérations.
Dans RStudio, le raccourci Ctrl + Shift + M (Cmd + Shift + M sur Mac) insère un tuyau. S’il insère %>% au lieu de |>, allez dans Tools > Global Options > Code et cochez Use native pipe operator. Les deux fonctionnent, mais nous utilisons |> dans tout le cours.
Quatre opérations
Choisir des colonnes : select()
select() garde les colonnes dont on lui donne le nom :
d |> select(age, sexe, heures.tv)# A tibble: 2,000 × 3
age sexe heures.tv
<int> <fct> <dbl>
1 28 Femme 0
2 23 Femme 1
3 59 Homme 0
4 34 Homme 2
5 71 Femme 3
6 35 Femme 2
7 60 Femme 2.9
8 47 Homme 1
9 20 Femme 2
10 28 Homme 2
# ℹ 1,990 more rows
Précédé d’un signe -, un nom de colonne est au contraire retiré :
d |> select(-id, -poids)# A tibble: 2,000 × 18
age sexe nivetud occup qualif freres.soeurs clso relig trav.imp
<int> <fct> <fct> <fct> <fct> <int> <fct> <fct> <fct>
1 28 Femme Enseignement sup… Exer… Emplo… 8 Oui Ni c… Peu imp…
2 23 Femme <NA> Etud… <NA> 2 Oui Ni c… <NA>
3 59 Homme Derniere annee d… Exer… Techn… 2 Non Ni c… Aussi i…
4 34 Homme Enseignement sup… Exer… Techn… 1 Non Appa… Moins i…
5 71 Femme Derniere annee d… Retr… Emplo… 0 Oui Prat… <NA>
6 35 Femme Enseignement tec… Exer… Emplo… 5 Non Ni c… Le plus…
7 60 Femme Derniere annee d… Au f… Ouvri… 1 Oui Appa… <NA>
8 47 Homme Enseignement tec… Exer… Ouvri… 5 Non Ni c… Peu imp…
9 20 Femme <NA> Etud… <NA> 4 Oui Appa… <NA>
10 28 Homme Enseignement tec… Exer… Autre 2 Non Prat… Moins i…
# ℹ 1,990 more rows
# ℹ 9 more variables: trav.satisf <fct>, hard.rock <fct>, lecture.bd <fct>,
# peche.chasse <fct>, cuisine <fct>, bricol <fct>, cinema <fct>, sport <fct>,
# heures.tv <dbl>
Choisir des lignes : filter()
filter() garde les lignes qui vérifient une condition. On y retrouve les opérateurs logiques du chapitre 1. Voici les enquêtés de moins de 25 ans :
d |> filter(age < 25)# A tibble: 169 × 20
id age sexe nivetud poids occup qualif freres.soeurs clso relig
<int> <int> <fct> <fct> <dbl> <fct> <fct> <int> <fct> <fct>
1 2 23 Femme <NA> 9738. Etud… <NA> 2 Oui Ni c…
2 9 20 Femme <NA> 7809. Etud… <NA> 4 Oui Appa…
3 18 20 Femme <NA> 1551. Etud… <NA> 0 Non Appa…
4 25 20 Femme <NA> 8780. Exer… Ouvri… 0 Non Appa…
5 38 19 Femme <NA> 7626. Etud… <NA> 1 Non Appa…
6 54 23 Femme Enseignement… 11355. Au f… <NA> 1 Non Prat…
7 56 23 Femme Enseignement… 6344. Exer… Ouvri… 1 Oui Prat…
8 59 23 Homme Enseignement… 3463. Chom… Emplo… 4 Oui Appa…
9 79 22 Femme Enseignement… 6169. Exer… Emplo… 3 Oui Rejet
10 94 23 Femme <NA> 4454. Etud… <NA> 0 Oui Prat…
# ℹ 159 more rows
# ℹ 10 more variables: trav.imp <fct>, trav.satisf <fct>, hard.rock <fct>,
# lecture.bd <fct>, peche.chasse <fct>, cuisine <fct>, bricol <fct>,
# cinema <fct>, sport <fct>, heures.tv <dbl>
On peut donner plusieurs conditions, séparées par des virgules. La virgule signifie « et » : une ligne n’est gardée que si elle vérifie toutes les conditions.
d |> filter(age < 25, sexe == "Femme")# A tibble: 93 × 20
id age sexe nivetud poids occup qualif freres.soeurs clso relig
<int> <int> <fct> <fct> <dbl> <fct> <fct> <int> <fct> <fct>
1 2 23 Femme <NA> 9738. Etud… <NA> 2 Oui Ni c…
2 9 20 Femme <NA> 7809. Etud… <NA> 4 Oui Appa…
3 18 20 Femme <NA> 1551. Etud… <NA> 0 Non Appa…
4 25 20 Femme <NA> 8780. Exer… Ouvri… 0 Non Appa…
5 38 19 Femme <NA> 7626. Etud… <NA> 1 Non Appa…
6 54 23 Femme Enseignement… 11355. Au f… <NA> 1 Non Prat…
7 56 23 Femme Enseignement… 6344. Exer… Ouvri… 1 Oui Prat…
8 79 22 Femme Enseignement… 6169. Exer… Emplo… 3 Oui Rejet
9 94 23 Femme <NA> 4454. Etud… <NA> 0 Oui Prat…
10 100 19 Femme <NA> 2187. Exer… Emplo… 0 Oui Appa…
# ℹ 83 more rows
# ℹ 10 more variables: trav.imp <fct>, trav.satisf <fct>, hard.rock <fct>,
# lecture.bd <fct>, peche.chasse <fct>, cuisine <fct>, bricol <fct>,
# cinema <fct>, sport <fct>, heures.tv <dbl>
Pour un « ou », utilisez | : filter(age < 25 | age > 70).
Et rappelez-vous : la comparaison s’écrit ==, avec deux signes égal. Si vous écrivez sexe = "Femme", R vous le signale par un message qui commence par We detected a named input.
Trier : arrange()
arrange() trie les lignes selon une variable, par ordre croissant :
d |> arrange(age)# A tibble: 2,000 × 20
id age sexe nivetud poids occup qualif freres.soeurs clso relig
<int> <int> <fct> <fct> <dbl> <fct> <fct> <int> <fct> <fct>
1 162 18 Homme <NA> 4983. Etud… <NA> 2 Non Appa…
2 215 18 Homme <NA> 4631. Etud… <NA> 2 Oui Ni c…
3 346 18 Femme <NA> 1725. Etud… <NA> 9 Non Prat…
4 377 18 Homme <NA> 11213. Etud… <NA> 1 Oui Rejet
5 511 18 Homme <NA> 2448. Etud… <NA> 6 Non Prat…
6 646 18 Homme <NA> 4545. Exer… Ouvri… 6 Non Ni c…
7 852 18 Femme <NA> 3285. Etud… <NA> 0 Non Prat…
8 916 18 Femme <NA> 3564. Etud… <NA> 2 Non Ni c…
9 1211 18 Homme Enseignement… 14254. Exer… Ouvri… 1 Non Appa…
10 1213 18 Femme 2eme cycle 4910. Chom… <NA> 4 Non Ni c…
# ℹ 1,990 more rows
# ℹ 10 more variables: trav.imp <fct>, trav.satisf <fct>, hard.rock <fct>,
# lecture.bd <fct>, peche.chasse <fct>, cuisine <fct>, bricol <fct>,
# cinema <fct>, sport <fct>, heures.tv <dbl>
Pour trier dans l’ordre décroissant, on entoure la variable de desc() :
d |> arrange(desc(age))# A tibble: 2,000 × 20
id age sexe nivetud poids occup qualif freres.soeurs clso relig
<int> <int> <fct> <fct> <dbl> <fct> <fct> <int> <fct> <fct>
1 1916 97 Femme Derniere ann… 2163. Autr… Autre 5 Non Prat…
2 270 96 Femme Derniere ann… 9993. Retr… <NA> 1 Oui Ni c…
3 1542 93 Femme Derniere ann… 7108. Reti… <NA> 7 Non Prat…
4 235 92 Homme N'a jamais f… 827. Retr… Ouvri… 0 Ne s… Prat…
5 1151 91 Homme Derniere ann… 4291. Reti… <NA> 3 Oui Appa…
6 96 90 Femme Derniere ann… 5875. Au f… Emplo… 7 Non Prat…
7 1122 90 Femme 1er cycle 14812. Retr… Emplo… 3 Oui Prat…
8 1767 90 Femme Derniere ann… 12266. Reti… <NA> 2 Non Appa…
9 759 89 Femme Derniere ann… 9555. Au f… <NA> 1 Non Prat…
10 971 89 Homme Derniere ann… 2374. Retr… Ouvri… 5 Oui Prat…
# ℹ 1,990 more rows
# ℹ 10 more variables: trav.imp <fct>, trav.satisf <fct>, hard.rock <fct>,
# lecture.bd <fct>, peche.chasse <fct>, cuisine <fct>, bricol <fct>,
# cinema <fct>, sport <fct>, heures.tv <dbl>
Enchaîner les opérations
C’est ici que le tuyau prend tout son sens. Cherchons les femmes de moins de 25 ans, triées par nombre d’heures de télévision décroissant, en n’affichant que trois variables :
d |>
filter(age < 25, sexe == "Femme") |>
arrange(desc(heures.tv)) |>
select(age, heures.tv, qualif)# A tibble: 93 × 3
age heures.tv qualif
<int> <dbl> <fct>
1 19 10 Employe
2 18 10 <NA>
3 23 9 Employe
4 19 6 <NA>
5 23 6 <NA>
6 24 6 Employe
7 21 5 <NA>
8 18 5 Employe
9 22 5 Ouvrier specialise
10 24 4 Employe
# ℹ 83 more rows
Le code se lit comme une phrase : prends d, ensuite garde les femmes de moins de 25 ans, ensuite trie par heures de télévision décroissantes, ensuite garde trois colonnes. Chaque étape reçoit le tableau produit par l’étape précédente.
Prenez l’habitude d’écrire une opération par ligne, avec le |> en fin de ligne. Le |> en fin de ligne indique à R que la commande continue à la ligne suivante.
Créer une variable : mutate()
La variable heures.tv contient le nombre d’heures passées chaque jour devant la télévision. mutate() permet de créer une nouvelle variable à partir des autres, ici le même temps exprimé en minutes :
d |>
mutate(minutes.tv = heures.tv * 60) |>
select(heures.tv, minutes.tv)# A tibble: 2,000 × 2
heures.tv minutes.tv
<dbl> <dbl>
1 0 0
2 1 60
3 0 0
4 2 120
5 3 180
6 2 120
7 2.9 174
8 1 60
9 2 120
10 2 120
# ℹ 1,990 more rows
À gauche du =, le nom de la nouvelle variable ; à droite, le calcul qui la produit. Comme pour les vecteurs du chapitre 1, le calcul s’applique à toutes les lignes à la fois. On peut créer plusieurs variables d’un coup, en les séparant par des virgules :
d |>
mutate(
minutes.tv = heures.tv * 60,
tv.semaine = heures.tv * 7
) |>
select(heures.tv, minutes.tv, tv.semaine)# A tibble: 2,000 × 3
heures.tv minutes.tv tv.semaine
<dbl> <dbl> <dbl>
1 0 0 0
2 1 60 7
3 0 0 0
4 2 120 14
5 3 180 21
6 2 120 14
7 2.9 174 20.3
8 1 60 7
9 2 120 14
10 2 120 14
# ℹ 1,990 more rows
Conserver le résultat
Les fonctions du tidyverse ne modifient pas le tableau d’origine : elles en renvoient une version transformée, qui s’affiche puis disparaît. Pour garder le résultat, il faut l’assigner, comme n’importe quelle valeur :
d <- d |> mutate(minutes.tv = heures.tv * 60)C’est l’erreur la plus fréquente au début : on lance d |> mutate(...), on voit le bon résultat s’afficher, et on constate plus tard que la variable n’existe pas.
Sans <-, rien n’est conservé. Et surtout, R ne dit rien.
Récapitulatif
| Fonction | Ce qu’elle fait |
|---|---|
select() |
choisit des colonnes |
filter() |
choisit des lignes |
arrange() |
trie les lignes |
mutate() |
crée ou modifie une colonne |
Toutes prennent un tableau comme premier argument, et toutes renvoient un tableau. C’est ce qui permet de les enchaîner avec |>.
À vous
Exercice 2
Dans un script commenté :
- Affichez uniquement les variables
age,qualifetsport. - Combien y a-t-il d’enquêtés de 60 ans ou plus ?
- Affichez les hommes qui déclarent pratiquer un sport, triés du plus jeune au plus âgé.
- Créez une variable
tv.annuelle(heures de télévision par an) et conservez-la dansd. - Quel est l’enquêté le plus âgé du jeu de données ? Quel est son niveau d’études ?
- Combien d’enquêtés ont entre 25 ans (inclus) et 35 ans (exclus) ?
Pour les questions 2 et 6, le nombre de lignes du résultat s’affiche en haut du tibble. Pour la question 6, il faut deux conditions séparées par une virgule.
d |> select(age, qualif, sport)# A tibble: 2,000 × 3
age qualif sport
<int> <fct> <fct>
1 28 Employe Non
2 23 <NA> Oui
3 59 Technicien Oui
4 34 Technicien Oui
5 71 Employe Non
6 35 Employe Oui
7 60 Ouvrier qualifie Non
8 47 Ouvrier qualifie Non
9 20 <NA> Non
10 28 Autre Oui
# ℹ 1,990 more rows
Question 2 : « 60 ans ou plus » inclut 60, d’où >=.
d |> filter(age >= 60)# A tibble: 516 × 21
id age sexe nivetud poids occup qualif freres.soeurs clso relig
<int> <int> <fct> <fct> <dbl> <fct> <fct> <int> <fct> <fct>
1 5 71 Femme Derniere ann… 4329. Retr… Emplo… 0 Oui Prat…
2 7 60 Femme Derniere ann… 6166. Au f… Ouvri… 1 Oui Appa…
3 11 65 Femme Enseignement… 704. Retr… Emplo… 3 Oui Appa…
4 13 63 Femme Derniere ann… 7118. Retr… Emplo… 1 Oui Appa…
5 14 67 Femme Enseignement… 587. Exer… <NA> 5 Oui Prat…
6 15 76 Femme A arrete ses… 11042. Retr… <NA> 2 Oui Appa…
7 17 62 Homme Enseignement… 4836. Retr… Cadre 4 Non Prat…
8 19 70 Homme Derniere ann… 3141. Retr… Ouvri… 2 Non Appa…
9 24 79 Femme Derniere ann… 11663. Autr… <NA> 11 Non Prat…
10 26 74 Homme Enseignement… 1701. Retr… Cadre 2 Oui Ni c…
# ℹ 506 more rows
# ℹ 11 more variables: trav.imp <fct>, trav.satisf <fct>, hard.rock <fct>,
# lecture.bd <fct>, peche.chasse <fct>, cuisine <fct>, bricol <fct>,
# cinema <fct>, sport <fct>, heures.tv <dbl>, minutes.tv <dbl>
Il y a 516 enquêtés de 60 ans ou plus.
d |> filter(sexe == "Homme", sport == "Oui") |> arrange(age)# A tibble: 369 × 21
id age sexe nivetud poids occup qualif freres.soeurs clso relig
<int> <int> <fct> <fct> <dbl> <fct> <fct> <int> <fct> <fct>
1 162 18 Homme <NA> 4983. Etud… <NA> 2 Non Appa…
2 215 18 Homme <NA> 4631. Etud… <NA> 2 Oui Ni c…
3 377 18 Homme <NA> 11213. Etud… <NA> 1 Oui Rejet
4 511 18 Homme <NA> 2448. Etud… <NA> 6 Non Prat…
5 646 18 Homme <NA> 4545. Exer… Ouvri… 6 Non Ni c…
6 1261 18 Homme Enseignement… 6789. Chom… <NA> 5 Non Prat…
7 1395 18 Homme <NA> 9133. Etud… <NA> 2 Oui Appa…
8 1774 18 Homme <NA> 8834. Etud… <NA> 1 Non Appa…
9 1937 18 Homme <NA> 6401. Etud… <NA> 3 Oui Ni c…
10 204 19 Homme <NA> 6340. Etud… <NA> 1 Non Appa…
# ℹ 359 more rows
# ℹ 11 more variables: trav.imp <fct>, trav.satisf <fct>, hard.rock <fct>,
# lecture.bd <fct>, peche.chasse <fct>, cuisine <fct>, bricol <fct>,
# cinema <fct>, sport <fct>, heures.tv <dbl>, minutes.tv <dbl>
Question 4 : une heure par jour fait 365 heures par an. Sans le d <-, la variable serait affichée puis perdue.
d <- d |> mutate(tv.annuelle = heures.tv * 365)d |> arrange(desc(age)) |> select(age, sexe, nivetud)# A tibble: 2,000 × 3
age sexe nivetud
<int> <fct> <fct>
1 97 Femme Derniere annee d'etudes primaires
2 96 Femme Derniere annee d'etudes primaires
3 93 Femme Derniere annee d'etudes primaires
4 92 Homme N'a jamais fait d'etudes
5 91 Homme Derniere annee d'etudes primaires
6 90 Femme Derniere annee d'etudes primaires
7 90 Femme 1er cycle
8 90 Femme Derniere annee d'etudes primaires
9 89 Femme Derniere annee d'etudes primaires
10 89 Homme Derniere annee d'etudes primaires
# ℹ 1,990 more rows
L’enquêtée la plus âgée est une femme de 97 ans, qui a arrêté ses études après la dernière année d’études primaires.
d |> filter(age >= 25, age < 35)# A tibble: 321 × 22
id age sexe nivetud poids occup qualif freres.soeurs clso relig
<int> <int> <fct> <fct> <dbl> <fct> <fct> <int> <fct> <fct>
1 1 28 Femme Enseignement… 2634. Exer… Emplo… 8 Oui Ni c…
2 4 34 Homme Enseignement… 5732. Exer… Techn… 1 Non Appa…
3 10 28 Homme Enseignement… 2277. Exer… Autre 2 Non Prat…
4 21 30 Femme Enseignement… 14648. Exer… Emplo… 6 Oui Appa…
5 22 30 Homme Enseignement… 8128. Exer… Emplo… 2 Oui Appa…
6 27 31 Femme Enseignement… 6663. Exer… Ouvri… 1 Non Appa…
7 30 30 Homme Enseignement… 10621. Exer… Ouvri… 1 Oui Ni c…
8 32 29 Homme Enseignement… 14162. Exer… Autre 2 Oui Appa…
9 50 34 Femme Enseignement… 6592. Exer… Cadre 2 Non Appa…
10 55 26 Homme Enseignement… 9293. Exer… Techn… 1 Oui Rejet
# ℹ 311 more rows
# ℹ 12 more variables: trav.imp <fct>, trav.satisf <fct>, hard.rock <fct>,
# lecture.bd <fct>, peche.chasse <fct>, cuisine <fct>, bricol <fct>,
# cinema <fct>, sport <fct>, heures.tv <dbl>, minutes.tv <dbl>,
# tv.annuelle <dbl>
321 enquêtés ont entre 25 et 35 ans.
Les leçons swirl
Lancez swirl :
library(swirl)
swirl()Faites les leçons Tableaux_de_donnees puis Manipuler_les_donnees, et déposez les fichiers .txt sur Moodle à la fin de chacune. Si vous bloquez sur une question, voir Si vous êtes bloqués.
La suite
Avant de passer au chapitre suivant, terminez les deux leçons swirl et déposez-les sur Moodle.
Nous savons désormais découper un tableau. Au chapitre suivant, nous apprendrons à le résumer : moyennes, effectifs, comparaisons entre groupes.