• 12 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 15/12/2020

Utilisez les facteurs

Les facteurs sont des vecteurs un peu particuliers, facilitant la manipulation de données qualitatives (qu’elles soient numériques ou caractères). En effet, en plus de stocker les différents éléments comme un vecteur classique, il stocke également l’ensemble des différentes modalités possibles dans un attribut accessible via la commande  levels  .

Ils forment une classe d’objets et bénéficient de traitements particuliers lors de leur manipulation et lors de l’utilisation de certaines fonctions. Les facteurs peuvent être non ordonnés (homme, femme) ou ordonnés (niveaux de ski).

Création de facteurs

Il existe trois fonctions permettant de créer les facteurs.

Les fonctions factor et as.factor

Ces deux fonctions sont très similaires dans leur utilisation. La première permet de créer un facteur en définissant directement les différents éléments du facteur, l’autre permet de transformer un autre objet en facteur. Dans tous les cas, ces deux fonctions permettent généralement de créer des facteurs non ordonnés.

Exemple pour la fonction  factor  :

y <- c("M","F","F","M","F")
y
# [1] "M" "F" "F" "M" "F"
yf <- factor(y)
yf
# [1] M F F M F
# Levels: F M

Il est possible de regarder les attributs de ce yf  .

attributes(yf)
# $levels
# [1] "F" "M"
# $class
# [1] "factor"
levels(yf)
# [1] "F" "M"
nlevels(yf)
# [1] 2

On peut renommer les modalités lors de la construction du facteur :

levels(yf) <- c("Femme","Homme")
yf
# [1] Homme Femme Femme Homme Femme
# Levels: Femme Homme

Et à présent, un exemple avec la fonction  as.factor  :

salto <- c(1:5,5:1)
salto
# [1] 1 2 3 4 5 5 4 3 2 1
salto.f <- as.factor(salto)
salto.f
# [1] 1 2 3 4 5 5 4 3 2 1
# Levels: 1 2 3 4 5

La fonction ordered

La fonction  ordered  va quant à elle nous permettre de créer des facteurs ordonnés :

niveau <- ordered(c("débutant","débutant","champion",
"champion","moyen","moyen","moyen",
"champion"),
levels=c("débutant","moyen","champion"))
niveau
# [1] débutant débutant champion champion moyen moyen moyen
# [8] champion
# Levels: débutant < moyen < champion

Pour vous affranchir des contraintes liées à l’utilisation des facteurs, vous pouvez à tout moment repasser sur un vecteur classique en utilisant les fonctions correspondantes :  as.numeric  pour des numériques,  as.character  pour des caractères, etc.

Utiliser des facteurs pour mieux représenter la réalité

Lors de vos analyses statistiques, vous allez être confronté à de nombreuses variables qualitatives codées différemment :

  • sous forme de vecteurs de caractères (comme des stations météo, etc.) ;

  • sous forme de vecteurs numériques (comme des CSP où chaque numéro correspond à une catégorie particulière, par exemple 1 : ouvriers ; 2 : cadres ; etc.).

Les facteurs vont nous permettre de mieux faire comprendre à R que nous manipulons des variables qualitatives. Prenons l’exemple d’une variable  X  comportant des numériques :

X <- c(rep(10,3),rep(12,2),rep(13,4))
X
# [1] 10 10 10 12 12 13 13 13 13

Déterminer le type de données d’un vecteur

Il existe deux méthodes classiques pour savoir si un objet de type vecteur est une variable quantitative ou une variable qualitative sans afficher la totalité du vecteur. La première consiste à interroger R sur le type :

is.factor(X)
# [1] FALSE
is.numeric(X)
# [1] TRUE

La seconde consiste à effectuer un résumé de la variable (  summary  ). Quand il s’agit d’une variable quantitative, le minimum, le maximum, les quartiles et la moyenne sont affichés. Par contre, pour un facteur, le nombre d’observations pour les six premiers niveaux de la variable qualitative est donné :

summary(X)
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 10.00 10.00 12.00 11.78 13.00 13.00

De manière évidente, il s’agit bien ici d’une variable quantitative.

Le passage en facteur se fait simplement en utilisant la fonction  factor  :

Xqual <- factor(X)
Xqual
# [1] 10 10 10 12 12 13 13 13 13
# Levels: 10 12 13
summary(Xqual)
# 10 12 13
# 3 2 4

L’affichage d’un facteur permet clairement de le distinguer d’un numérique par la présence des niveaux (levels) en fin d’affichage. Il en est de même pour le résumé fourni par  summary  .

Conversion d’un facteur en numérique

Le passage de facteur en numérique se fait en deux étapes. On transforme le facteur en vecteur de type caractère, puis on transforme ce dernier en numérique. Si l’on transforme directement le facteur en numérique, les niveaux sont recodés dans l’ordre (le premier niveau sera 1, le deuxième 2, etc.) :

## conversion avec recodage des modalités
as.numeric(Xqual)
# [1] 1 1 1 2 2 3 3 3 3
## conversion sans recodage des modalités : 2 étapes
provisoire <- as.character(Xqual)
provisoire
# [1] "10" "10" "10" "12" "12" "13" "13" "13" "13"
as.numeric(provisoire)
# [1] 10 10 10 12 12 13 13 13 13

En résumé

Le facteur est un objet permettant de représenter au mieux une variable qualitative.

Il permet de garder en mémoire :

  • l’ensemble des éléments, comme un vecteur ;

  • les différentes modalités possibles.

Les modalités d’un facteur peuvent être ordonnées ou non.

Il n’est pas possible d’ajouter un élément qui n’est pas défini dans les différentes modalités (levels).

Vous pouvez convertir un vecteur en facteur et inversement, en utilisant les fonctions adéquates.

Dans le prochain chapitre, nous verrons comment créer des matrices avec R.

Et si vous obteniez un diplôme OpenClassrooms ?
  • Formations jusqu’à 100 % financées
  • Date de début flexible
  • Projets professionnalisants
  • Mentorat individuel
Trouvez la formation et le financement faits pour vous
Exemple de certificat de réussite
Exemple de certificat de réussite