2.2 Les facteurs

Pour encoder les réponses à une question ferme (question ne laissant à son destinataire que des choix prédéfinis), on utilisera un type particulier de vecteurs appelés facteurs. De façon générale, en statistique, un facteur est typiquement utilisé pour stocker les valeurs observées d’une variable qualitative ou catégorique.

Les facteurs prennent leurs valeurs dans un ensemble de modalités prédéfinies (niveaux), et ne peuvent en prendre d’autres. Pour créer un facteur, on utilise la fonction factor. Voici un exemple.

[1] H H F H H F F F
Levels: F H

Les niveaux d’un facteur

sexe et un objet de type facteur qui ne peut prendre que les niveaux ,ou modalités, “H” et “F”. Pour connaitre les niveaux d’un facteur, on utilise la fonction levels.

[1] "F" "H"

Examinons la structure de ce facteur avec la fonction str

 Factor w/ 2 levels "F","H": 2 2 1 2 2 1 1 1

Notez que R affiche les niveaux d’un facteur sous forme de caractère. Cependant, en interne, R les stocke sous forme d’entiers (dans notre exemple 2=“H” et 1=“F”).

Par défaut, les niveaux d’un facteur nouvellement créés sont l’ensemble des valeurs uniques du vecteur utilisé.

L’option levels permets de prédéfinir les niveaux d’un facteur. Dans l’exemple suivant, de représente le résultat du lancement d’un dé huit fois.

[1] 3 2 2 1 3 1 3 1
Levels: 1 2 3 4 5 6
 Factor w/ 6 levels "1","2","3","4",..: 3 2 2 1 3 1 3 1

Modifier les valeurs d’un facteur

On peut modifier la valeur d’un facteur facilement par indexation comme pour un vecteur. Exemples:

[1] F H F H H F F F
Levels: F H
[1] 3 6 5 1 3 1 3 1
Levels: 1 2 3 4 5 6

Si on modifie la valeur d’un facteur en utilisant une valeur qui ne fait pas partie de ces niveaux, on obtient un message d’erreur et une valeur manquante est utilisée à la place. Exemple:

Warning in `[<-.factor`(`*tmp*`, 1, value = "Homme"): invalid factor level,
NA generated
[1] <NA> H    F    H    H    F    F    F   
Levels: F H
[1] H H F H H F F F
Levels: F H

Modifier les niveaux d’un facteur

On peut modifier les niveaux facilement en utilisant la fonction levels.

[1] "F" "H"
[1] H     H     Femme H     H     Femme Femme Femme
Levels: Femme H

Voici un autre exemple

[1] Homme Homme Femme Homme Homme Femme Femme Femme
Levels: Femme Homme

et encore un autre

[1] Face 3 Face 6 Face 5 Face 1 Face 3 Face 1 Face 3 Face 1
Levels: Face 1 Face 2 Face 3 Face 4 Face 5 Face 6

L’ordre des niveaux

En interne, par défaut, les niveaux d’un facteur nouvellement créés sont classés par ordre alphanumérique croissant ou selon l’ordre qui figure dans l’option levels. Cet ordre est utilisé chaque fois que le facteur est employé.

[1] H H F H H F F F
Levels: H F
H F 
4 4 
[1] H H F H H F F F
Levels: F H
F H 
4 4 

On peut modifier l’ordre des niveaux d’un facteur existant en utilisant l’option levels:

[1] H H F H H F F F
Levels: H F
H F 
4 4 

Découper une variable numérique en classes

Une opération relativement courante consiste à découper une variable numérique en classes. On utilise pour cela la fonction cut. Voici un exemple

 [1] (80,90] (70,80] (80,90] (50,60] (70,80] (60,70] (60,70] (50,60]
 [9] <NA>    (50,60] (50,60] (70,80] (70,80] (70,80] (70,80] (80,90]
[17] (60,70] (60,70] (70,80]
Levels: (50,60] (60,70] (70,80] (80,90]