Il est préférable d’avoir déjà lu le chapitre Vecteurs, indexation et assignation avant d’aborder celui-ci.

Listes

Par nature, les vecteurs ne peuvent contenir que des valeurs de même type (numériques, textuels ou logique). Or, on peut avoir besoin de représenter des objets plus complexes composés d’éléments disparates. C’est ce que permettent les listes.

Propriétés et création

Une liste se créée tout simplement avec la fonction list :

l1 <- list(1:5, "abc")
l1
[[1]]
[1] 1 2 3 4 5

[[2]]
[1] "abc"

Une liste est un ensemble d’objets, quels qu’ils soient, chaque élément d’une liste pouvant avoir ses propres dimensions. Dans notre exemple précédent, nous avons créée une liste l1 composée de deux élements : un vecteur d’entiers de longeur 5 et un vecteur textuel de longueur 1. La longueur d’une liste correspond aux nombres d’éléments qu’elle contient et s’obtient avec length :

length(l1)
[1] 2

Comme les vecteurs, une liste peut être nommées et les noms des éléments d’une liste accessibles avec names :

l2 <- list(minuscules = letters, majuscules = LETTERS, 
  mois = month.name)
l2
$minuscules
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k"
[12] "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v"
[23] "w" "x" "y" "z"

$majuscules
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K"
[12] "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V"
[23] "W" "X" "Y" "Z"

$mois
 [1] "January"   "February"  "March"    
 [4] "April"     "May"       "June"     
 [7] "July"      "August"    "September"
[10] "October"   "November"  "December" 
length(l2)
[1] 3
names(l2)
[1] "minuscules" "majuscules" "mois"      

Que se passe-t-il maintenant si l’on effectue la commande suivante ?

l <- list(l1, l2)

À votre avis, quelle est la longueur de cette nouvelle liste l ? 5 ?

length(l)
[1] 2

Et bien non ! Elle est de longeur 2, car nous avons créé une liste composée de deux éléments qui sont eux-mêmes des listes. Cela est plus lisible si l’on fait appel à la fonction str qui permet de visualiser la structure d’un objet.

str(l)
List of 2
 $ :List of 2
  ..$ : int [1:5] 1 2 3 4 5
  ..$ : chr "abc"
 $ :List of 3
  ..$ minuscules: chr [1:26] "a" "b" "c" "d" ...
  ..$ majuscules: chr [1:26] "A" "B" "C" "D" ...
  ..$ mois      : chr [1:12] "January" "February" "March" "April" ...

Une liste peut contenir tout type d’objets, y compris d’autres listes. Pour combiner les éléments d’une liste, il faut utiliser la fonction append :

l <- append(l1, l2)
length(l)
[1] 5
str(l)
List of 5
 $           : int [1:5] 1 2 3 4 5
 $           : chr "abc"
 $ minuscules: chr [1:26] "a" "b" "c" "d" ...
 $ majuscules: chr [1:26] "A" "B" "C" "D" ...
 $ mois      : chr [1:12] "January" "February" "March" "April" ...

On peut noter en passant qu’une liste peut tout à fait n’être que partiellement nommée.

Indexation

Les crochets simples ([]) fonctionnent comme pour les vecteurs. On peut utiliser à la fois l’indexation par position, l’indexation par nom et l’indexation par condition.

l
[[1]]
[1] 1 2 3 4 5

[[2]]
[1] "abc"

$minuscules
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k"
[12] "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v"
[23] "w" "x" "y" "z"

$majuscules
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K"
[12] "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V"
[23] "W" "X" "Y" "Z"

$mois
 [1] "January"   "February"  "March"    
 [4] "April"     "May"       "June"     
 [7] "July"      "August"    "September"
[10] "October"   "November"  "December" 
l[c(1, 3, 4)]
[[1]]
[1] 1 2 3 4 5

$minuscules
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k"
[12] "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v"
[23] "w" "x" "y" "z"

$majuscules
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K"
[12] "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V"
[23] "W" "X" "Y" "Z"
l[c("majuscules", "minuscules")]
$majuscules
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K"
[12] "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V"
[23] "W" "X" "Y" "Z"

$minuscules
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k"
[12] "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v"
[23] "w" "x" "y" "z"
l[c(TRUE, TRUE, FALSE, FALSE, TRUE)]
[[1]]
[1] 1 2 3 4 5

[[2]]
[1] "abc"

$mois
 [1] "January"   "February"  "March"    
 [4] "April"     "May"       "June"     
 [7] "July"      "August"    "September"
[10] "October"   "November"  "December" 

Même si l’on extrait un seul élément, l’extraction obtenue avec les crochets simples renvoie toujours une liste, ici composée d’un seul élément :

str(l[1])
List of 1
 $ : int [1:5] 1 2 3 4 5

Supposons que je souhaite calculer la moyenne des valeurs du premier élément de ma liste. Essayons la commande suivante :

mean(l[1])
Warning in mean.default(l[1]): argument is not
numeric or logical: returning NA
[1] NA

Nous obtenons un message d’erreur. En effet, R ne sait pas calculer une moyenne à partir d’une liste. Ce qu’il lui faut, c’est un vecteur de valeurs numériques. Autrement dit, ce que nous cherchons à obtenir c’est le contenu même du premier élément de notre liste et non une liste à un seul élément.

C’est ici que les doubles crochets ([[]]) vont rentrer en jeu. Pour ces derniers, nous pourrons utiliser l’indexation par position ou l’indexation par nom, mais pas l’indexation par condition. De plus, le critère que l’on indiquera doit indiquer un et un seul élément de notre liste. Au lieu de renvoyer une liste à un élément, les doubles crochets vont renvoyer l’élément désigné. Vite, un exemple :

str(l[1])
List of 1
 $ : int [1:5] 1 2 3 4 5
str(l[[1]])
 int [1:5] 1 2 3 4 5

Maintenant, nous pouvons calculer notre moyenne :

mean(l[[1]])
[1] 3

Nous pouvons aussi tester l’indexation par nom.

l[["mois"]]
 [1] "January"   "February"  "March"    
 [4] "April"     "May"       "June"     
 [7] "July"      "August"    "September"
[10] "October"   "November"  "December" 

Mais il faut avouer que cette écriture avec doubles crochets et guillemets est un peu lourde. Heureusement, un nouvel acteur entre en scène : le symbole dollar ($). C’est un raccourci des doubles crochets pour l’indexation par nom. Que l’on utilise ainsi :

l$mois
 [1] "January"   "February"  "March"    
 [4] "April"     "May"       "June"     
 [7] "July"      "August"    "September"
[10] "October"   "November"  "December" 

Les écritures l$mois et l[["mois"]] sont équivalentes. Attention ! Cela ne fonctionne que pour l’indexation par nom.

l$1
Error: unexpected numeric constant in "l$1"

L’assignation par indexation fonctionne également avec les doubles crochets ou le signe dollar :

l[[2]] <- list(c("un", "vecteur", "textuel"))
l$mois <- c("Janvier", "Février", "Mars")
l
[[1]]
[1] 1 2 3 4 5

[[2]]
[[2]][[1]]
[1] "un"      "vecteur" "textuel"


$minuscules
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k"
[12] "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v"
[23] "w" "x" "y" "z"

$majuscules
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K"
[12] "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V"
[23] "W" "X" "Y" "Z"

$mois
[1] "Janvier" "Février" "Mars"   

Tableaux de données

Il y a un type d’objets que nous avons déjà abordé dans le chapitre Premier travail avec les données, il s’agit du tableau de données ou data frame en anglais.

Propriétés et création

Dans R, les tableaux de données sont tout simplement des listes avec quelques propriétés spéficiques :

  • les tableaux de données ne peuvent contenir que des vecteurs ;
  • tous les vecteurs d’un tableau de données ont la même longueur ;
  • tous les éléments d’un tableau de données sont nommés et ont chacun un nom unique.

Dès lors, un tableau de données correspond aux fichiers de données que l’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 :

df <- data.frame(sexe = c("f", "f", "h", "h"), age = c(52, 
  31, 29, 35), blond = c(FALSE, TRUE, TRUE, FALSE))
df
  sexe age blond
1    f  52 FALSE
2    f  31  TRUE
3    h  29  TRUE
4    h  35 FALSE
str(df)
'data.frame':   4 obs. of  3 variables:
 $ sexe : Factor w/ 2 levels "f","h": 1 1 2 2
 $ age  : num  52 31 29 35
 $ blond: logi  FALSE TRUE TRUE FALSE

La fonction data.frame a un gros défaut : si on ne désactive pas l’option stringsAsFactors elle transforme les chaînes de caractères, ici la variable sexe en facteurs (un type de vecteur que nous aborderons plus en détail dans un prochain chapitre).

df <- data.frame(sexe = c("f", "f", "h", "h"), age = c(52, 
  31, 29, 35), blond = c(FALSE, TRUE, TRUE, FALSE), 
  stringsAsFactors = FALSE)
df
  sexe age blond
1    f  52 FALSE
2    f  31  TRUE
3    h  29  TRUE
4    h  35 FALSE
str(df)
'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 :

length(df)
[1] 3
names(df)
[1] "sexe"  "age"   "blond"

Comme tous les éléments d’un tableau de données ont la même longeur, 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.

nrow(df)
[1] 4
ncol(df)
[1] 3
dim(df)
[1] 4 3

De plus, tout comme les colonnes ont un nom, il est aussi possible de nommer les lignes avec row.names :

row.names(df) <- c("Anna", "Mary-Ann", "Michael", "John")
df
         sexe age blond
Anna        f  52 FALSE
Mary-Ann    f  31  TRUE
Michael     h  29  TRUE
John        h  35 FALSE

Indexation

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.

df[1]
         sexe
Anna        f
Mary-Ann    f
Michael     h
John        h
df[[1]]
[1] "f" "f" "h" "h"
df$sexe
[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 :

df
         sexe age blond
Anna        f  52 FALSE
Mary-Ann    f  31  TRUE
Michael     h  29  TRUE
John        h  35 FALSE
df[3, 2]
[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.

df["Michael", "age"]
[1] 29
df[c(F, F, T, F), c(c(F, T, F))]
[1] 29
df[3, "age"]
[1] 29
df["Michael", 2]
[1] 29

Il est également possible de ne préciser qu’un seul critère. Par exemple, si je souhaite les deux premières observations, ou les variables sexe et blond :

df[1:2, ]
         sexe age blond
Anna        f  52 FALSE
Mary-Ann    f  31  TRUE
df[, c("sexe", "blond")]
         sexe blond
Anna        f FALSE
Mary-Ann    f  TRUE
Michael     h  TRUE
John        h FALSE

Il a suffit de laisser un espace vide avant ou après la virgule. ATTENTION ! Il est cependant impératif de laisser la virgule pour indiquer à R que l’on souhaite effectuer une indexation à deux dimensions. Si l’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 :

df[2, ]
         sexe age blond
Mary-Ann    f  31  TRUE
df[, 2]
[1] 52 31 29 35
df[2]
         age
Anna      52
Mary-Ann  31
Michael   29
John      35

Au passage, on pourra noter quelques subtilités sur le résultat renvoyé.

str(df[2, ])
'data.frame':   1 obs. of  3 variables:
 $ sexe : chr "f"
 $ age  : num 31
 $ blond: logi TRUE
str(df[, 2])
 num [1:4] 52 31 29 35
str(df[2])
'data.frame':   4 obs. of  1 variable:
 $ age: num  52 31 29 35
str(df[[2]])
 num [1:4] 52 31 29 35

df[2, ] signifie que l’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’occurence 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 longeur quatre. Reste df[, 2] qui signifie renvoie toutes les observations pour la seconde colonne. Or l’indexation bidimensionnelle a un fonctionnement un peu particulier : par défaut cela renvoie un tableau de données mais s’il n’y a qu’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 de [.data.frame.

Afficher les données

Prenons un tableau de données un peu plus conséquent, en l’occurence un jeu de données 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.

library(questionr)
data(hdv2003)
d <- hdv2003

Si l’on demande à afficher l’objet d dans la console (résultat non reproduit ici), R va afficher l’ensemble du contenu de d à 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 que l’on peut appeller avec la fonction View.

View(d)

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 :

head(d)
  id age  sexe
1  1  28 Femme
2  2  23 Femme
3  3  59 Homme
4  4  34 Homme
5  5  71 Femme
6  6  35 Femme
                                               nivetud
1 Enseignement superieur y compris technique superieur
2                                                 <NA>
3                    Derniere annee d'etudes primaires
4 Enseignement superieur y compris technique superieur
5                    Derniere annee d'etudes primaires
6        Enseignement technique ou professionnel court
     poids                 occup     qualif
1 2634.398 Exerce une profession    Employe
2 9738.396       Etudiant, eleve       <NA>
3 3994.102 Exerce une profession Technicien
4 5731.662 Exerce une profession Technicien
5 4329.094              Retraite    Employe
6 8674.699 Exerce une profession    Employe
  freres.soeurs clso                       relig
1             8  Oui Ni croyance ni appartenance
2             2  Oui Ni croyance ni appartenance
3             2  Non Ni croyance ni appartenance
4             1  Non  Appartenance sans pratique
5             0  Oui         Pratiquant regulier
6             5  Non Ni croyance ni appartenance
                      trav.imp    trav.satisf
1                Peu important Insatisfaction
2                         <NA>           <NA>
3 Aussi important que le reste      Equilibre
4 Moins important que le reste   Satisfaction
5                         <NA>           <NA>
6            Le plus important      Equilibre
  hard.rock lecture.bd peche.chasse cuisine
1       Non        Non          Non     Oui
2       Non        Non          Non     Non
3       Non        Non          Non     Non
4       Non        Non          Non     Oui
5       Non        Non          Non     Non
6       Non        Non          Non     Non
  bricol cinema sport heures.tv
1    Non    Non   Non         0
2    Non    Oui   Oui         1
3    Non    Non   Oui         0
4    Oui    Oui   Oui         2
5    Non    Non   Non         3
6    Non    Oui   Oui         2
tail(d, 2)
       id age  sexe
1999 1999  24 Femme
2000 2000  66 Femme
                                           nivetud
1999 Enseignement technique ou professionnel court
2000  Enseignement technique ou professionnel long
         poids                 occup  qualif
1999 13740.810 Exerce une profession Employe
2000  7709.513              Au foyer Employe
     freres.soeurs clso
1999             2  Non
2000             3  Non
                          relig
1999 Appartenance sans pratique
2000 Appartenance sans pratique
                         trav.imp trav.satisf
1999 Moins important que le reste   Equilibre
2000                         <NA>        <NA>
     hard.rock lecture.bd peche.chasse cuisine
1999       Non        Non          Non     Non
2000       Non        Oui          Non     Oui
     bricol cinema sport heures.tv
1999    Non    Oui   Non       0.3
2000    Non    Non   Non       0.0

L’extension dplyr, que nous n’aborderons en détails que plus tard, propose une fonction 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.

library(dplyr)
glimpse(d)
Observations: 2,000
Variables: 20
$ id            <int> 1, 2, 3, 4, 5, 6, 7, 8,...
$ age           <int> 28, 23, 59, 34, 71, 35,...
$ sexe          <fctr> Femme, Femme, Homme, H...
$ nivetud       <fctr> Enseignement superieur...
$ poids         <dbl> 2634.3982, 9738.3958, 3...
$ occup         <fctr> Exerce une profession,...
$ qualif        <fctr> Employe, NA, Technicie...
$ freres.soeurs <int> 8, 2, 2, 1, 0, 5, 1, 5,...
$ clso          <fctr> Oui, Oui, Non, Non, Ou...
$ relig         <fctr> Ni croyance ni apparte...
$ trav.imp      <fctr> Peu important, NA, Aus...
$ trav.satisf   <fctr> Insatisfaction, NA, Eq...
$ hard.rock     <fctr> Non, Non, Non, Non, No...
$ lecture.bd    <fctr> Non, Non, Non, Non, No...
$ peche.chasse  <fctr> Non, Non, Non, Non, No...
$ cuisine       <fctr> Oui, Non, Non, Oui, No...
$ bricol        <fctr> Non, Non, Non, Oui, No...
$ cinema        <fctr> Non, Oui, Non, Oui, No...
$ sport         <fctr> Non, Oui, Oui, Oui, No...
$ heures.tv     <dbl> 0.0, 1.0, 0.0, 2.0, 3.0...

L’extension questionr propose une fonction lookfor qui permet de lister les différentes variables d’un fichier de données :

lookfor(d)
        variable
1             id
2            age
3           sexe
4        nivetud
5          poids
6          occup
7         qualif
8  freres.soeurs
9           clso
10         relig
11      trav.imp
12   trav.satisf
13     hard.rock
14    lecture.bd
15  peche.chasse
16       cuisine
17        bricol
18        cinema
19         sport
20     heures.tv

Lorsque l’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 à lookfor un mot-clé pour limiter la recherche. Par exemple :

lookfor(d, "trav")
      variable
11    trav.imp
12 trav.satisf

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.

summary(d)
       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   
 Enseignement technique ou professionnel court       :463  
 Enseignement superieur y compris technique superieur:441  
 Derniere annee d'etudes primaires                   :341  
 1er cycle                                           :204  
 2eme cycle                                          :183  
 (Other)                                             :256  
 NA's                                                :112  
     poids                            occup     
 Min.   :   78.08   Exerce une profession:1049  
 1st Qu.: 2221.82   Chomeur              : 134  
 Median : 4631.19   Etudiant, eleve      :  94  
 Mean   : 5535.61   Retraite             : 392  
 3rd Qu.: 7626.53   Retire des affaires  :  77  
 Max.   :31092.14   Au foyer             : 171  
                    Autre inactif        :  83  
                      qualif    freres.soeurs   
 Employe                 :594   Min.   : 0.000  
 Ouvrier qualifie        :292   1st Qu.: 1.000  
 Cadre                   :260   Median : 2.000  
 Ouvrier specialise      :203   Mean   : 3.283  
 Profession intermediaire:160   3rd Qu.: 5.000  
 (Other)                 :144   Max.   :22.000  
 NA's                    :347                   
          clso     
 Oui        : 936  
 Non        :1037  
 Ne sait pas:  27  
                   
                   
                   
                   
                         relig    
 Pratiquant regulier        :266  
 Pratiquant occasionnel     :442  
 Appartenance sans pratique :760  
 Ni croyance ni appartenance:399  
 Rejet                      : 93  
 NSP ou NVPR                : 40  
                                  
                         trav.imp  
 Le plus important           : 29  
 Aussi important que le reste:259  
 Moins important que le reste:708  
 Peu important               : 52  
 NA's                        :952  
                                   
                                   
         trav.satisf  hard.rock  lecture.bd
 Satisfaction  :480   Non:1986   Non:1953  
 Insatisfaction:117   Oui:  14   Oui:  47  
 Equilibre     :451                        
 NA's          :952                        
                                           
                                           
                                           
 peche.chasse cuisine    bricol     cinema    
 Non:1776     Non:1119   Non:1147   Non:1174  
 Oui: 224     Oui: 881   Oui: 853   Oui: 826  
                                              
                                              
                                              
                                              
                                              
 sport        heures.tv     
 Non:1277   Min.   : 0.000  
 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.

summary(d$sexe)
Homme Femme 
  899  1101 
summary(d$age)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  18.00   35.00   48.00   48.16   60.00   97.00 

L’extension questionr fournit également une fonction bien pratique pour décrire les différentes variables d’un tableau de données. Il s’agit de describe. Faisons de suite un essai :

describe(d)
[2000 obs. x 20 variables] tbl_df tbl data.frame

$id: 
integer: 1 2 3 4 5 6 7 8 9 10 ...
min: 1 - max: 2000 - NAs: 0 (0%) - 2000 unique values

$age: 
integer: 28 23 59 34 71 35 60 47 20 28 ...
min: 18 - max: 97 - NAs: 0 (0%) - 78 unique values

$sexe: 
nominal factor: "Femme" "Femme" "Homme" "Homme" "Femme" "Femme" "Femme" "Homme" "Femme" "Homme" ...
2 levels: Homme | Femme
NAs: 0 (0%)

$nivetud: 
nominal factor: "Enseignement superieur y compris technique superieur" NA "Derniere annee d'etudes primaires" "Enseignement superieur y compris technique superieur" "Derniere annee d'etudes primaires" "Enseignement technique ou professionnel court" "Derniere annee d'etudes primaires" "Enseignement technique ou professionnel court" NA "Enseignement technique ou professionnel long" ...
8 levels: N'a jamais fait d'etudes | A arrete ses etudes, avant la derniere annee d'etudes primaires | Derniere annee d'etudes primaires | 1er cycle | 2eme cycle | Enseignement technique ou professionnel court | Enseignement technique ou professionnel long | Enseignement superieur y compris technique superieur
NAs: 112 (0.1%)

$poids: 
numeric: 2634.3982157 9738.3957759 3994.1024587 5731.6615081 4329.0940022 8674.6993828 6165.8034861 12891.640759 7808.8720636 2277.160471 ...
min: 78.0783403 - max: 31092.14132 - NAs: 0 (0%) - 1877 unique values

$occup: 
nominal factor: "Exerce une profession" "Etudiant, eleve" "Exerce une profession" "Exerce une profession" "Retraite" "Exerce une profession" "Au foyer" "Exerce une profession" "Etudiant, eleve" "Exerce une profession" ...
7 levels: Exerce une profession | Chomeur | Etudiant, eleve | Retraite | Retire des affaires | Au foyer | Autre inactif
NAs: 0 (0%)

$qualif: 
nominal factor: "Employe" NA "Technicien" "Technicien" "Employe" "Employe" "Ouvrier qualifie" "Ouvrier qualifie" NA "Autre" ...
7 levels: Ouvrier specialise | Ouvrier qualifie | Technicien | Profession intermediaire | Cadre | Employe | Autre
NAs: 347 (0.2%)

$freres.soeurs: 
integer: 8 2 2 1 0 5 1 5 4 2 ...
min: 0 - max: 22 - NAs: 0 (0%) - 19 unique values

$clso: 
nominal factor: "Oui" "Oui" "Non" "Non" "Oui" "Non" "Oui" "Non" "Oui" "Non" ...
3 levels: Oui | Non | Ne sait pas
NAs: 0 (0%)

$relig: 
nominal factor: "Ni croyance ni appartenance" "Ni croyance ni appartenance" "Ni croyance ni appartenance" "Appartenance sans pratique" "Pratiquant regulier" "Ni croyance ni appartenance" "Appartenance sans pratique" "Ni croyance ni appartenance" "Appartenance sans pratique" "Pratiquant occasionnel" ...
6 levels: Pratiquant regulier | Pratiquant occasionnel | Appartenance sans pratique | Ni croyance ni appartenance | Rejet | NSP ou NVPR
NAs: 0 (0%)

$trav.imp: 
nominal factor: "Peu important" NA "Aussi important que le reste" "Moins important que le reste" NA "Le plus important" NA "Peu important" NA "Moins important que le reste" ...
4 levels: Le plus important | Aussi important que le reste | Moins important que le reste | Peu important
NAs: 952 (0.5%)

$trav.satisf: 
nominal factor: "Insatisfaction" NA "Equilibre" "Satisfaction" NA "Equilibre" NA "Insatisfaction" NA "Satisfaction" ...
3 levels: Satisfaction | Insatisfaction | Equilibre
NAs: 952 (0.5%)

$hard.rock: 
nominal factor: "Non" "Non" "Non" "Non" "Non" "Non" "Non" "Non" "Non" "Non" ...
2 levels: Non | Oui
NAs: 0 (0%)

$lecture.bd: 
nominal factor: "Non" "Non" "Non" "Non" "Non" "Non" "Non" "Non" "Non" "Non" ...
2 levels: Non | Oui
NAs: 0 (0%)

$peche.chasse: 
nominal factor: "Non" "Non" "Non" "Non" "Non" "Non" "Oui" "Oui" "Non" "Non" ...
2 levels: Non | Oui
NAs: 0 (0%)

$cuisine: 
nominal factor: "Oui" "Non" "Non" "Oui" "Non" "Non" "Oui" "Oui" "Non" "Non" ...
2 levels: Non | Oui
NAs: 0 (0%)

$bricol: 
nominal factor: "Non" "Non" "Non" "Oui" "Non" "Non" "Non" "Oui" "Non" "Non" ...
2 levels: Non | Oui
NAs: 0 (0%)

$cinema: 
nominal factor: "Non" "Oui" "Non" "Oui" "Non" "Oui" "Non" "Non" "Oui" "Oui" ...
2 levels: Non | Oui
NAs: 0 (0%)

$sport: 
nominal factor: "Non" "Oui" "Oui" "Oui" "Non" "Oui" "Non" "Non" "Non" "Oui" ...
2 levels: Non | Oui
NAs: 0 (0%)

$heures.tv: 
numeric: 0 1 0 2 3 2 2.9 1 2 2 ...
min: 0 - max: 12 - NAs: 5 (0%) - 30 unique values

Comme on le voit sur cet exemple, describe nous affiche le type des variables, les premières valeurs de chacune, le nombre de valeurs manquantes, le nombre de valeurs différentes (uniques) ainsi que quelques autres informations suivant le type de variables.

Il est possible de restreindre l’affichage à seulement quelques variables en indiquant le nom de ces dernières.

describe(d, "age", "trav.satisf")
[2000 obs. x 20 variables] tbl_df tbl data.frame

$age: 
integer: 28 23 59 34 71 35 60 47 20 28 ...
min: 18 - max: 97 - NAs: 0 (0%) - 78 unique values

$trav.satisf: 
nominal factor: "Insatisfaction" NA "Equilibre" "Satisfaction" NA "Equilibre" NA "Insatisfaction" NA "Satisfaction" ...
3 levels: Satisfaction | Insatisfaction | Equilibre
NAs: 952 (0.5%)

On peut également transmettre juste une variable :

describe(d$sexe)
Warning in table(labelled::to_factor(x, levels),
exclude = exclude, useNA = "ifany"): 'exclude'
containing NA and 'useNA' != "no"' are a bit
contradicting
[2000 obs.] 
nominal factor: "Femme" "Femme" "Homme" "Homme" "Femme" "Femme" "Femme" "Homme" "Femme" "Homme" ...
2 levels: Homme | Femme
NAs: 0 (0%)

         n   %
Homme  899  45
Femme 1101  55
Total 2000 100

En résumé

Les Listes

  • Les listes sont des objets unidimensionnels pouvant contenir tout type d’objet, y compris d’autres listes.
  • Elles ont une longueur que l’obtient avec length.
  • On créé une liste avec list et on peut fusionner des listes avec append.
  • Tout comme les vecteurs, les listes peuvent être nommées et les noms des éléments s’obtiennent avec names.
  • Les crochets simples ([]) permettent de sélectionner les éléments d’une liste, en utilisant l’indexation par position, l’indexation par nom ou l’indexation par condition. Cela renvoie toujours une autre liste.
  • Les doubles crochets ([[]]) renvoient directement le contenu d’un élément de la liste que l’on aura sélectionné par position ou par nom.
  • Le symbole $ est un raccourci pour facilement sélectionner un élément par son nom, liste$nom étant équivalent à liste[["nom"]].

Les Tableaux de données

  • Les tableaux de données sont des listes avec des propriétés particulières :
    1. tous les éléments sont des vecteurs ;
    2. tous les vecteurs ont la même longueur ;
    3. tous les vecteurs ont un nom et ce nom est unique.
  • On peut créer un tableau de données avec data.frame.
  • Les tableaux de données correspondent aux fichiers de données que l’on utilise usuellement dans d’autres logiciels de statistiques : les variables sont représentées en colonnes et les observations en lignes.
  • Ce sont des objets bidimensionnels : ncol renvoit le nombre de colonnes et nrow le nombre de lignes.
  • Les doubles crochets ([[]]) et le symbole dollar ($) fonctionnent comme pour les listes et permettent d’accéder aux variables.
  • Il est possible d’utiliser des coordonnées bidimensionnelles avec les crochets simples ([]) en indiquant un critère sur les lignes puis un critère sur les colonnes, séparés par une virgule (,).