Les facteurs en R : Modéliser les variables catégorielles

@joekakone

Joseph Konka @joekakone

03/03/2026 · 5 min

Maîtrisez les facteurs en R pour manipuler des variables qualitatives, définir des modalités (levels), créer des facteurs ordonnés et éviter les pièges de conversion.

En analyse de données et en modélisation statistique, toutes les variables ne sont pas purement numériques. Les variables qualitatives ou catégorielles (comme le genre, une catégorie socioprofessionnelle, une mention à un examen ou une région géographique) nécessitent une structure spécifique.

En R, ces variables sont représentées par les facteurs (factors).

Un facteur stocke non seulement les valeurs observées, mais aussi l'ensemble des modalités possibles (appelées levels).


1. Création d'un facteur avec factor()#

Pour convertir un vecteur de texte en facteur, on utilise la fonction factor() :

# Vecteur de texte initial
reponses <- c("Oui", "Non", "Oui", "Oui", "Ne sait pas", "Non")

# Conversion en facteur
f_reponses <- factor(reponses)

# Affichage
print(f_reponses)

Sortie dans la console :

[1] Oui         Non         Oui         Oui         Ne sait pas Non        
Levels: Ne sait pas Non Oui

R a automatiquement détecté les modalités distinctes et les a classées par défaut par ordre alphabétique : "Ne sait pas", "Non", "Oui".

Pour inspecter les modalités d'un facteur :

levels(f_reponses)   # [1] "Ne sait pas" "Non"         "Oui"        
nlevels(f_reponses)  # Nombre de modalités : [1] 3


2. Compter les effectifs avec table()#

Les facteurs sont particulièrement pratiques pour générer rapidement des tableaux de fréquences :

# Fréquences absolues (effectifs)
table(f_reponses)

# Fréquences relatives (proportions / pourcentages)
prop.table(table(f_reponses)) * 100

3. Facteurs nominaux vs Facteurs ordinaux (Ordered Factors)#

En statistique, on distingue deux types de variables qualitatives : 1. Nominales : Aucune hiérarchie naturelle entre les modalités (ex : "Rouge", "Vert", "Bleu"). 2. Ordinales : Il existe une hiérarchie ou un ordre logique évident (ex : "Débutant" < "Intermédiaire" < "Avancé").

Pour créer un facteur ordonné, on spécifie l'argument ordered = TRUE ainsi que l'ordre exact des niveaux souhaité via levels :

niveaux_clients <- c("Argent", "Or", "Bronze", "Or", "Platine", "Argent")

f_niveaux <- factor(
  niveaux_clients,
  levels = c("Bronze", "Argent", "Or", "Platine"),
  ordered = TRUE
)

print(f_niveaux)

Sortie :

[1] Argent  Or      Bronze  Or      Platine Argent 
Levels: Bronze < Argent < Or < Platine

Grâce à cet ordre, vous pouvez désormais réaliser des comparaisons logiques :

f_niveaux[1] > f_niveaux[3] # "Argent" > "Bronze" -> [1] TRUE


4. Le piège classique : Convertir un facteur en numérique#

[!WARNING] Le piège des codes internes :
En mémoire, R stocke les facteurs sous forme d'entiers pointant vers les libellés des levels. Si votre facteur contient des chiffres enregistrés sous forme de texte (ex : "10", "20", "30"), faire directement as.numeric(f) renverra les indices des modalités (1, 2, 3) et NON les nombres réels !

notes <- factor(c("15", "12", "18", "12"))

# ERREUR : renvoie [1] 2 1 3 1 (les numéros de modalités)
as.numeric(notes) 

# CORRECT : repasser d'abord par le texte
as.numeric(as.character(notes)) # [1] 15 12 18 12

Mise en pratique#

  1. Créez un vecteur satisfaction contenant 6 réponses : "Bien", "Moyen", "Très bien", "Moyen", "Insuffisant", "Bien".
  2. Convertissez ce vecteur en un facteur ordinal ordonné du moins satisfait au plus satisfait : "Insuffisant" < "Moyen" < "Bien" < "Très bien".
  3. Générez le tableau des fréquences absolues et calculez le pourcentage de clients ayant répondu "Bien" ou "Très bien".

Commentaires

Inscrivez-vous à une formation complète

Voir le catalogue