Découvrir un tableau de données

L3 économie-finance

Auteur·rice
Affiliation

Elias Bouacida

Université Paris 8

Date de publication

12 octobre 2026

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

chien <- c("Chihuahua", 5)
chien

y <- c(10, 20, NA, 40)
mean(y)
mean(y, na.rm = TRUE)

z <- 7
z > 5 & z < 10
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.

Note

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.

Avertissement

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 :

  1. Combien y a-t-il d’observations ? de variables ?
  2. Citez trois variables quantitatives et trois variables qualitatives.
  3. Quelles sont les modalités de la variable relig ?
  4. 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"                
  1. Le tableau compte 2000 observations (les enquêtés) et 20 variables.
  2. Les variables quantitatives sont age, freres.soeurs et heures.tv. Les variables id et poids sont aussi des nombres, mais ce ne sont pas des variables à analyser : id est un identifiant, et poids est 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.
  3. Les modalités de relig sont affichées ci-dessus.
  4. Dans la visionneuse, les valeurs manquantes apparaissent en grisé sous la forme NA. On en trouve dans nivetud, qualif, trav.imp, trav.satisf et heures.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.

Astuce

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>
Avertissement

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)
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 plus tard que la variable n’existe pas.

Sans <-, rien n’est conservé. Et surtout, R ne dit rien.

Récapitulatif

Les quatre fonctions de base
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é :

  1. Affichez uniquement les variables age, qualif et sport.
  2. Combien y a-t-il d’enquêtés de 60 ans ou plus ?
  3. Affichez les hommes qui déclarent pratiquer un sport, triés du plus jeune au plus âgé.
  4. Créez une variable tv.annuelle (heures de télévision par an) et conservez-la dans d.
  5. Quel est l’enquêté le plus âgé du jeu de données ? Quel est son niveau d’études ?
  6. Combien d’enquêtés ont entre 25 ans (inclus) et 35 ans (exclus) ?
Astuce

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.