sexe age blond
1 f 52 FALSE
2 f 31 TRUE
3 h 29 TRUE
4 h 35 FALSE
'data.frame': 4 obs. of 3 variables:
$ sexe : chr "f" "f" "h" "h"
$ age : num 52 31 29 35
$ blond: logi FALSE TRUE TRUE FALSE
Les tableaux de données, ou data frame en anglais, est un type d’objets essentiel pour les données d’enquêtes.
Dans R, les tableaux de données sont tout simplement des listes (voir Chapitre 3) avec quelques propriétés spécifiques :
Dès lors, un tableau de données correspond aux fichiers de données qu’on a l’habitude de manipuler dans d’autres logiciels de statistiques comme SPSS ou Stata. Les variables sont organisées en colonnes et les observations en lignes.
On peut créer un tableau de données avec la fonction data.frame() :
sexe age blond
1 f 52 FALSE
2 f 31 TRUE
3 h 29 TRUE
4 h 35 FALSE
'data.frame': 4 obs. of 3 variables:
$ sexe : chr "f" "f" "h" "h"
$ age : num 52 31 29 35
$ blond: logi FALSE TRUE TRUE FALSE
Un tableau de données étant une liste, la fonction length() renverra le nombre d’éléments de la liste, donc dans le cas présent le nombre de variables, et names() leurs noms :
Comme tous les éléments d’un tableau de données ont la même longueur, cet objet peut être vu comme bidimensionnel. Les fonctions nrow(), ncol() et dim() donnent respectivement le nombre de lignes, le nombre de colonnes et les dimensions de notre tableau.
De plus, tout comme les colonnes ont un nom, il est aussi possible de nommer les lignes avec row.names() :
Les tableaux de données étant des listes, nous pouvons donc utiliser les crochets simples ([]), les crochets doubles ([[]]) et le symbole dollar ($) pour extraire des parties de notre tableau, de la même manière que pour n’importe quelle liste.
sexe
Anna f
Mary-Ann f
Michael h
John h
[1] "f" "f" "h" "h"
[1] "f" "f" "h" "h"
Cependant, un tableau de données étant un objet bidimensionnel, il est également possible d’extraire des données sur deux dimensions, à savoir un premier critère portant sur les lignes et un second portant sur les colonnes. Pour cela, nous utiliserons les crochets simples ([]) en séparant nos deux critères par une virgule (,).
Un premier exemple :
sexe age blond
Anna f 52 FALSE
Mary-Ann f 31 TRUE
Michael h 29 TRUE
John h 35 FALSE
[1] 29
Cette première commande indique que nous souhaitons la troisième ligne de la seconde colonne, autrement dit l’âge de Michael. Le même résultat peut être obtenu avec l’indexation par nom, l’indexation par condition, ou un mélange de tout ça.
[1] 29
[1] 29
[1] 29
[1] 29
Il est également possible de préciser un seul critère. Par exemple, si je souhaite les deux premières observations, ou les variables sexe et blond :
sexe age blond
Anna f 52 FALSE
Mary-Ann f 31 TRUE
sexe blond
Anna f FALSE
Mary-Ann f TRUE
Michael h TRUE
John h FALSE
Il a suffi de laisser un espace vide avant ou après la virgule.
ATTENTION ! Il est cependant impératif de laisser la virgule pour indiquer à R qu’on souhaite effectuer une indexation à deux dimensions. Si on oublie la virgule, cela nous ramène au mode de fonctionnement des listes. Et le résultat n’est pas forcément le même :
Au passage, on pourra noter quelques subtilités sur le résultat renvoyé.
'data.frame': 1 obs. of 3 variables:
$ sexe : chr "f"
$ age : num 31
$ blond: logi TRUE
num [1:4] 52 31 29 35
'data.frame': 4 obs. of 1 variable:
$ age: num 52 31 29 35
num [1:4] 52 31 29 35
df[2, ] signifie qu’on veut toutes les variables pour le second individu. Le résultat est un tableau de données à une ligne et trois colonnes. df[2] correspond au mode d’extraction des listes et renvoie donc une liste à un élément, en l’occurrence un tableau de données à quatre observations et une variable. df[[2]] quant à lui renvoie le contenu de cette variable, soit un vecteur numérique de longueur quatre. Reste df[, 2] qui renvoie toutes les observations pour la seconde colonne. Or l’indexation bidimensionnelle a un fonctionnement un peu particulier : par défaut elle renvoie un tableau de données mais s’il y a une seule variable dans l’extraction, c’est un vecteur qui est renvoyé. Pour plus de détails, on pourra consulter l’entrée d’aide help("[.data.frame").
Prenons un tableau de données un peu plus conséquent, en l’occurrence le jeu de données ?questionr::hdv2003 disponible dans l’extension questionr et correspondant à un extrait de l’enquête Histoire de vie réalisée par l’INSEE en 2003. Il contient 2000 individus et 20 variables.
Si on demande d’afficher l’objet hdv2003 dans la console (résultat non reproduit ici), R va afficher l’ensemble du contenu de hdv2003 à l’écran ce qui, sur un tableau de cette taille, ne sera pas très lisible. Pour une exploration visuelle, le plus simple est souvent d’utiliser la visionneuse intégrée à RStudio et qu’on peut appeler avec la fonction View().
Les fonctions head() et tail(), qui marchent également sur les vecteurs, permettent d’afficher seulement les premières (respectivement les dernières) lignes d’un tableau de données :
id age sexe nivetud poids
1 1 28 Femme Enseignement superieur y compris technique superieur 2634.398
2 2 23 Femme <NA> 9738.396
3 3 59 Homme Derniere annee d'etudes primaires 3994.102
4 4 34 Homme Enseignement superieur y compris technique superieur 5731.662
5 5 71 Femme Derniere annee d'etudes primaires 4329.094
6 6 35 Femme Enseignement technique ou professionnel court 8674.699
occup qualif freres.soeurs clso
1 Exerce une profession Employe 8 Oui
2 Etudiant, eleve <NA> 2 Oui
3 Exerce une profession Technicien 2 Non
4 Exerce une profession Technicien 1 Non
5 Retraite Employe 0 Oui
6 Exerce une profession Employe 5 Non
relig trav.imp trav.satisf
1 Ni croyance ni appartenance Peu important Insatisfaction
2 Ni croyance ni appartenance <NA> <NA>
3 Ni croyance ni appartenance Aussi important que le reste Equilibre
4 Appartenance sans pratique Moins important que le reste Satisfaction
5 Pratiquant regulier <NA> <NA>
6 Ni croyance ni appartenance Le plus important Equilibre
hard.rock lecture.bd peche.chasse cuisine bricol cinema sport heures.tv
1 Non Non Non Oui Non Non Non 0
2 Non Non Non Non Non Oui Oui 1
3 Non Non Non Non Non Non Oui 0
4 Non Non Non Oui Oui Oui Oui 2
5 Non Non Non Non Non Non Non 3
6 Non Non Non Non Non Oui Oui 2
id age sexe nivetud poids
1999 1999 24 Femme Enseignement technique ou professionnel court 13740.810
2000 2000 66 Femme Enseignement technique ou professionnel long 7709.513
occup qualif freres.soeurs clso
1999 Exerce une profession Employe 2 Non
2000 Au foyer Employe 3 Non
relig trav.imp trav.satisf
1999 Appartenance sans pratique Moins important que le reste Equilibre
2000 Appartenance sans pratique <NA> <NA>
hard.rock lecture.bd peche.chasse cuisine bricol cinema sport heures.tv
1999 Non Non Non Non Non Oui Non 0.3
2000 Non Oui Non Oui Non Non Non 0.0
L’extension dplyr propose une fonction dplyr::glimpse() (ce qui signifie aperçu
en anglais) qui permet de visualiser rapidement et de manière condensée le contenu d’un tableau de données.
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…
L’extension labelled propose une fonction labelled::look_for() qui permet de lister les différentes variables d’un fichier de données :
pos variable label col_type missing values
1 id — int 0
2 age — int 0
3 sexe — fct 0 Homme
Femme
4 nivetud — fct 112 N'a jamais fait d'etudes
A arrete ses etudes, avant la derni~
Derniere annee d'etudes primaires
1er cycle
2eme cycle
Enseignement technique ou professio~
Enseignement technique ou professio~
Enseignement superieur y compris te~
5 poids — dbl 0
6 occup — fct 0 Exerce une profession
Chomeur
Etudiant, eleve
Retraite
Retire des affaires
Au foyer
Autre inactif
7 qualif — fct 347 Ouvrier specialise
Ouvrier qualifie
Technicien
Profession intermediaire
Cadre
Employe
Autre
8 freres.soeurs — int 0
9 clso — fct 0 Oui
Non
Ne sait pas
10 relig — fct 0 Pratiquant regulier
Pratiquant occasionnel
Appartenance sans pratique
Ni croyance ni appartenance
Rejet
NSP ou NVPR
11 trav.imp — fct 952 Le plus important
Aussi important que le reste
Moins important que le reste
Peu important
12 trav.satisf — fct 952 Satisfaction
Insatisfaction
Equilibre
13 hard.rock — fct 0 Non
Oui
14 lecture.bd — fct 0 Non
Oui
15 peche.chasse — fct 0 Non
Oui
16 cuisine — fct 0 Non
Oui
17 bricol — fct 0 Non
Oui
18 cinema — fct 0 Non
Oui
19 sport — fct 0 Non
Oui
20 heures.tv — dbl 5
Parfois, on souhaite conserver le dictionnaire des variables d’un tableau de données à porter de mains. Le package guideR, le compagnon de guide-R, propose pour cela une fonction guideR::view_dictionary(). Cela applique labelled::look_for() à un tableau de données et génère un dictionnaire interactif des variables. Si vous êtes dans RStudio, il s’affichera par défaut dans le Viewer (usuellement dans le quadrant en bas à droite). Vous pouvez également sélectionner le nom du tableau de données dans votre script, puis rechercher View variable dictionary dans le menu Addins. Il existe aussi une variante guideR::view_detailed_dictionary().
Lorsqu’on a un gros tableau de données avec de nombreuses variables, il peut être difficile de retrouver la ou les variables d’intérêt. Il est possible d’indiquer à labelled::look_for() un mot-clé pour limiter la recherche. Par exemple :
pos variable label col_type missing values
11 trav.imp — fct 952 Le plus important
Aussi important que le reste
Moins important que le reste
Peu important
12 trav.satisf — fct 952 Satisfaction
Insatisfaction
Equilibre
Il est à noter que si la recherche n’est pas sensible à la casse (i.e. aux majuscules et aux minuscules), elle est sensible aux accents.
La méthode summary() qui fonctionne sur tout type d’objet permet d’avoir quelques statistiques de base sur les différentes variables de notre tableau, les statistiques affichées dépendant du type de variable.
id age sexe
Min. : 1.0 Min. :18.00 Homme: 899
1st Qu.: 500.8 1st Qu.:35.00 Femme:1101
Median :1000.5 Median :48.00
Mean :1000.5 Mean :48.16
3rd Qu.:1500.2 3rd Qu.:60.00
Max. :2000.0 Max. :97.00
nivetud poids
Enseignement technique ou professionnel court :463 Min. : 78.08
Enseignement superieur y compris technique superieur:441 1st Qu.: 2221.82
Derniere annee d'etudes primaires :341 Median : 4631.19
1er cycle :204 Mean : 5535.61
2eme cycle :183 3rd Qu.: 7626.54
(Other) :256 Max. :31092.14
NA's :112
occup qualif freres.soeurs
Exerce une profession:1049 Employe :594 Min. : 0.000
Chomeur : 134 Ouvrier qualifie :292 1st Qu.: 1.000
Etudiant, eleve : 94 Cadre :260 Median : 2.000
Retraite : 392 Ouvrier specialise :203 Mean : 3.283
Retire des affaires : 77 Profession intermediaire:160 3rd Qu.: 5.000
Au foyer : 171 (Other) :144 Max. :22.000
Autre inactif : 83 NA's :347
clso relig
Oui : 936 Pratiquant regulier :266
Non :1037 Pratiquant occasionnel :442
Ne sait pas: 27 Appartenance sans pratique :760
Ni croyance ni appartenance:399
Rejet : 93
NSP ou NVPR : 40
trav.imp trav.satisf hard.rock lecture.bd
Le plus important : 29 Satisfaction :480 Non:1986 Non:1953
Aussi important que le reste:259 Insatisfaction:117 Oui: 14 Oui: 47
Moins important que le reste:708 Equilibre :451
Peu important : 52 NA's :952
NA's :952
peche.chasse cuisine bricol cinema sport heures.tv
Non:1776 Non:1119 Non:1147 Non:1174 Non:1277 Min. : 0.000
Oui: 224 Oui: 881 Oui: 853 Oui: 826 Oui: 723 1st Qu.: 1.000
Median : 2.000
Mean : 2.247
3rd Qu.: 3.000
Max. :12.000
NA's :5
On peut également appliquer summary() à une variable particulière.
data.frame().ncol() renvoie le nombre de colonnes et nrow() le nombre de lignes.[[]]) et le symbole dollar ($) fonctionnent comme pour les listes et permettent d’accéder aux variables.[]) en indiquant un critère sur les lignes puis un critère sur les colonnes, séparés par une virgule (,).On pourra également se référer au webin-R #02 (les bases du langage R) sur YouTube.