11  Étiquettes de variables

11.1 Principe

Les étiquettes de variable permettent de donner un nom long, plus explicite, aux différentes colonnes d’un tableau de données (ou encore directement à un vecteur autonome). Dans le champs des grandes enquêtes, il est fréquent de nommer les variables q101, q102, etc. pour refléter le numéro de la question et d’indiquer ce qu’elle représente (groupe d’âges, milieu de résidence…) avec une étiquette.

Un usage, introduit par le package haven, et repris depuis par de nombreux autres packages dont gtsummary que nous aborderons dans de prochains chapitres, consiste à stocker les étiquettes de variables sous la forme d’un attribut1 "label" attaché au vecteur / à la colonne du tableau.

1 Pour plus d’information sur les attributs, voir Chapitre 6.

Le package labelled permet de manipuler aisément ces étiquettes de variables.

La visionneuse de données de RStudio sait reconnaître et afficher ces étiquettes de variable lorsqu’elles existent. Prenons pour exemple le jeu de données gtsummary::trial dont les colonnes ont des étiquettes de variable. La commande View(gtsummary::trial) permet d’ouvrir la visionneuse de données de RStudio. Comme on peut le constater, une étiquette de variable est bien présente sous le nom des différentes colonnes.

Figure 11.1: Présentation du tableau gtsummary::trial dans la visionneuse de RStudio

La fonction labelled::look_for() du package labelled permet de lister l’ensemble des variables d’un tableau de données et affiche notamment les étiquettes de variable associées.

library(labelled)
gtsummary::trial |> 
  look_for()
 pos variable label                  col_type missing values
 1   trt      Chemotherapy Treatment chr      0             
 2   age      Age                    dbl      11            
 3   marker   Marker Level (ng/mL)   dbl      10            
 4   stage    T Stage                fct      0       T1    
                                                      T2    
                                                      T3    
                                                      T4    
 5   grade    Grade                  fct      0       I     
                                                      II    
                                                      III   
 6   response Tumor Response         int      7             
 7   death    Patient Died           int      0             
 8   ttdeath  Months to Death/Censor dbl      0             

La fonction labelled::look_for() permet également de rechercher des variables en tenant compte à la fois de leur nom et de leur étiquette.

gtsummary::trial |> 
  look_for("months")
 pos variable label                  col_type missing values
 8   ttdeath  Months to Death/Censor dbl      0             
Astuce

Comme on le voit, la fonction labelled::look_for() est tout à fait adaptée pour générer un dictionnaire de codification. Ses différentes options sont détaillées dans une vignette dédiée. Les résultats renvoyés par labelled::look_for() sont récupérables dans un tableau de données que l’on pourra ainsi manipuler à sa guise.

gtsummary::trial |> 
  look_for() |> 
  dplyr::as_tibble()
# A tibble: 8 × 7
    pos variable label                  col_type missing levels     value_labels
  <int> <chr>    <chr>                  <chr>      <int> <named li> <named list>
1     1 trt      Chemotherapy Treatment chr            0 <NULL>     <NULL>      
2     2 age      Age                    dbl           11 <NULL>     <NULL>      
3     3 marker   Marker Level (ng/mL)   dbl           10 <NULL>     <NULL>      
4     4 stage    T Stage                fct            0 <chr [4]>  <NULL>      
5     5 grade    Grade                  fct            0 <chr [3]>  <NULL>      
6     6 response Tumor Response         int            7 <NULL>     <NULL>      
7     7 death    Patient Died           int            0 <NULL>     <NULL>      
8     8 ttdeath  Months to Death/Censor dbl            0 <NULL>     <NULL>      

11.2 Manipulation sur un vecteur / une colonne

La fonction labelled::var_label() permets de voir l’étiquette de variable attachée à un vecteur (renvoie NULL s’il n’y en a pas) mais également d’ajouter/modifier une étiquette.

Le fait d’ajouter une étiquette de variable à un vecteur ne modifie en rien son type ni sa classe. On peut associer une étiquette de variable à n’importe quel type de variable, qu’elle soit numérique, textuelle, un facteur ou encore des dates.

v <- c(1, 5, 2, 4, 1)
v |> var_label()
NULL
var_label(v) <- "Mon étiquette"
var_label(v)
[1] "Mon étiquette"
str(v)
 num [1:5] 1 5 2 4 1
 - attr(*, "label")= chr "Mon étiquette"
var_label(v) <- "Une autre étiquette"
var_label(v)
[1] "Une autre étiquette"
str(v)
 num [1:5] 1 5 2 4 1
 - attr(*, "label")= chr "Une autre étiquette"

Pour supprimer une étiquette, il suffit d’attribuer la valeur NULL.

var_label(v) <- NULL
str(v)
 num [1:5] 1 5 2 4 1

On peut appliquer labelled::var_label() directement sur une colonne de tableau.

var_label(iris$Petal.Length) <- "Longueur du pétale"
var_label(iris$Petal.Width) <- "Largeur du pétale"
var_label(iris$Species) <- "Espèce"
iris |> 
  look_for()
 pos variable     label              col_type missing values    
 1   Sepal.Length —                  dbl      0                 
 2   Sepal.Width  —                  dbl      0                 
 3   Petal.Length Longueur du pétale dbl      0                 
 4   Petal.Width  Largeur du pétale  dbl      0                 
 5   Species      Espèce             fct      0       setosa    
                                                      versicolor
                                                      virginica 

11.3 Manipulation sur un tableau de données

La fonction labelled::set_variable_labels() permets de manipuler les étiquettes de variable d’un tableau de données avec une syntaxe du type dplyr.

iris <- 
  iris |> 
  set_variable_labels(
    Species = NULL,
    Sepal.Length = "Longeur du sépale"
  )
iris |> 
  look_for()
 pos variable     label              col_type missing values    
 1   Sepal.Length Longeur du sépale  dbl      0                 
 2   Sepal.Width  —                  dbl      0                 
 3   Petal.Length Longueur du pétale dbl      0                 
 4   Petal.Width  Largeur du pétale  dbl      0                 
 5   Species      —                  fct      0       setosa    
                                                      versicolor
                                                      virginica 

11.4 Préserver les étiquettes

Certaines fonctions de R ne préservent pas les attributs et risquent donc d’effacer les étiquettes de variables que l’on a définit. Un exemple est la fonction générique subset() qui permet de sélectionner certaines lignes remplissant une certaines conditions.

iris |> 
  look_for()
 pos variable     label              col_type missing values    
 1   Sepal.Length Longeur du sépale  dbl      0                 
 2   Sepal.Width  —                  dbl      0                 
 3   Petal.Length Longueur du pétale dbl      0                 
 4   Petal.Width  Largeur du pétale  dbl      0                 
 5   Species      —                  fct      0       setosa    
                                                      versicolor
                                                      virginica 
iris |> 
  subset(Species == "setosa") |> 
  look_for()
 pos variable     label col_type missing values    
 1   Sepal.Length —     dbl      0                 
 2   Sepal.Width  —     dbl      0                 
 3   Petal.Length —     dbl      0                 
 4   Petal.Width  —     dbl      0                 
 5   Species      —     fct      0       setosa    
                                         versicolor
                                         virginica 

On pourra, dans ce cas précis, préférer la fonction dplyr::filter() qui préserve les attributs et donc les étiquettes de variables.

iris |> 
  dplyr::filter(Species == "setosa") |> 
  look_for()
 pos variable     label              col_type missing values    
 1   Sepal.Length Longeur du sépale  dbl      0                 
 2   Sepal.Width  —                  dbl      0                 
 3   Petal.Length Longueur du pétale dbl      0                 
 4   Petal.Width  Largeur du pétale  dbl      0                 
 5   Species      —                  fct      0       setosa    
                                                      versicolor
                                                      virginica 

On pourra également tirer parti de la fonction labelled::copy_labels_from() qui permet de copier les étiquettes d’un tableau à un autre.

iris |> 
  subset(Species == "setosa") |> 
  copy_labels_from(iris) |> 
  look_for()
 pos variable     label              col_type missing values    
 1   Sepal.Length Longeur du sépale  dbl      0                 
 2   Sepal.Width  —                  dbl      0                 
 3   Petal.Length Longueur du pétale dbl      0                 
 4   Petal.Width  Largeur du pétale  dbl      0                 
 5   Species      —                  fct      0       setosa    
                                                      versicolor
                                                      virginica