L3 économie-finance
Université Paris 8
9 septembre 2026
Pour chaque ligne, écrivez ce que R va afficher. Ne lancez rien avant d’avoir écrit vos réponses.
[1] 4
[1] "Chihuahua" "5"
[1] NA
[1] 23.33333
[1] TRUE
Important
Deux pièges classiques : x <- x + 1 écrase l’ancienne valeur de x, et mélanger texte et nombre dans c() convertit tout en texte – silencieusement.
La séance précédente, vous avez manipulé des vecteurs : une suite de valeurs de même type.
De vraies données ne se présentent jamais comme ça. Elles arrivent sous forme de tableau : des lignes (les individus, les observations) et des colonnes (les variables).
Ces quatre opérations couvrent la très grande majorité du travail de préparation de données.
Manipuler des tableaux avec les outils de base de R est possible, mais verbeux.
Le tidyverse est un ensemble de paquets conçus pour travailler sur des tableaux. C’est ce que nous utiliserons dans tout le reste du cours.
Note
tidyverse n’est pas un paquet mais une collection : dplyr pour manipuler les tableaux, ggplot2 pour les graphiques, tidyr pour les réorganiser. Un seul library() les charge tous.
L’enquête Histoires de vie 2003 de l’INSEE : 2000 personnes interrogées sur leurs conditions de vie, leur travail et leurs loisirs.
Elle est disponible dans le paquet questionr.
C’est ce jeu de données qui nous accompagnera jusqu’à la fin du cours.
Nous convertissons le tableau en tibble, la forme de tableau utilisée par le tidyverse :
# 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>
Astuce
Un tibble s’affiche proprement : les dix premières lignes, le type de chaque colonne et le nombre de lignes restantes. Taper hdv2003 sans conversion aurait affiché toutes les colonnes sur plusieurs lignes.
Un tableau est un objet comme un autre : on peut lui appliquer des fonctions.
glimpse() donne le type et les premières valeurs de chaque variable. C’est la commande à taper en premier devant un tableau inconnu.
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…
<int> et <dbl> : des nombres. Ce sont les variables quantitatives – l’âge, le nombre d’heures de télévision.<fct> : un facteur. C’est ainsi que R stocke une variable qualitative : un nombre limité de valeurs possibles, appelées modalités.Ouvrez le tableau dans la visionneuse de RStudio :
Puis, dans un script (éventuellement en commentant) :
relig ?Le tidyverse s’utilise avec un opérateur particulier, le tuyau (pipe) : |>.
Il prend ce qui est à sa gauche et le passe en premier argument de la fonction à sa droite.
Astuce
Raccourci clavier dans RStudio : Ctrl + Shift + M.
Lisez |> comme « ensuite ». L’intérêt apparaîtra quand nous enchaînerons plusieurs opérations.
select()# 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>
Le signe - retire la colonne au lieu de la garder.
filter()filter() garde les lignes qui vérifient une condition. On retrouve ici les opérateurs logiques de la séance dernière.
# 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>
# 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>
Avertissement
La virgule signifie « et ». Pour un « ou », utilisez |.
Et rappelez-vous : la comparaison s’écrit ==, avec deux signes égal.
arrange()# 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>
# 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>
C’est ici que le tuyau prend son sens. Les femmes de moins de 25 ans, triées par nombre d’heures de télévision, en n’affichant que trois variables :
# 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
Astuce
Une opération par ligne, |> en fin de ligne. Le code se lit alors comme une phrase : prends d, ensuite filtre, ensuite trie, ensuite sélectionne.
mutate()La variable heures.tv contient le nombre d’heures quotidiennes passées devant la télévision. Convertissons-la en minutes :
# 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
Les verbes du tidyverse ne modifient pas le tableau : ils en renvoient une version transformée. Pour garder le résultat, il faut l’assigner.
Important
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 ensuite que la variable n’existe pas.
Sans <-, rien n’est conservé. Et surtout : R ne dit rien.
| Verbe | Ce qu’il fait |
|---|---|
select() |
choisit des colonnes |
filter() |
choisit des lignes |
arrange() |
trie les lignes |
mutate() |
crée ou modifie une colonne |
Tous prennent le tableau en premier argument, tous renvoient un tableau. C’est ce qui permet de les enchaîner avec |>.
Dans un script commenté :
age, qualif et sport.tv.annuelle (heures de télévision par an) et conservez-la dans d.Astuce
Pour la question 6 : deux conditions séparées par une virgule.
Faites la leçon Tableaux_de_donnees et Manipuler_les_donnees et déposez le fichier sur Moodle.
Terminez les leçons swirl Tableaux_de_donnees et Manipuler_les_donnees.
Séance prochaine : nous savons désormais découper un tableau. Nous allons apprendre à le résumer – moyennes, effectifs, comparaisons entre groupes.