HOWTO · R
Convertir un facteur en valeurs numériques dans R
Découvrez comment convertir sans risque les facteurs R en étiquettes numériques, distinguer les codes des valeurs et traiter les étiquettes non valides.
Sur cette page
Utilisez as.numeric(as.character(f)) lorsqu’un facteur f contient des étiquettes numériques que vous souhaitez obtenir sous forme de nombres. En revanche, un appel direct à as.numeric(f) renvoie les codes entiers internes du facteur. La conversion directe n’est utile que si ces codes servent délibérément d’identifiants de catégories.
Comprendre ce que as.numeric renvoie pour un facteur
Les facteurs R contiennent des codes entiers et un ensemble distinct de niveaux textuels. Les codes désignent les niveaux selon leur ordre trié ou explicitement défini ; ils ne correspondent pas nécessairement aux mesures d’origine. Vous pouvez examiner ces deux composantes avec levels() et unclass().
Le résultat de as.numeric(f) est une suite de codes telle que 2 1 2 3. Cela ne signifie pas que les valeurs d’origine étaient 2, 1, 2 et 3. Cette distinction est importante lorsqu’une trame de données a importé comme facteur une colonne qui semble numérique.
Convertir en nombres les étiquettes numériques d’un facteur
Convertissez d’abord le facteur en caractères, puis les étiquettes en valeurs numériques :
f <- factor(c("3", "2", "3", "4"))
values <- as.numeric(as.character(f))
values
Pour un facteur dont les niveaux sont bien numériques, as.numeric(levels(f))[f] constitue une autre méthode efficace. Les deux approches récupèrent les étiquettes plutôt que les codes internes. La conversion préalable en caractères est généralement plus lisible et rend les deux étapes explicites.
Les étiquettes numériques décimales et négatives fonctionnent de la même manière. Effectuez la conversion près de l’étape d’importation ou de nettoyage, puis vérifiez le résultat avec str() ou class() avant de l’utiliser dans des calculs.
Encoder volontairement les étiquettes catégorielles
Si les étiquettes représentent des catégories, ne considérez pas leurs codes comme des mesures. Définissez explicitement l’ordre des catégories lorsqu’un identifiant stable est nécessaire :
grade <- factor(c("low", "high", "low"), levels = c("low", "high"))
codes <- as.numeric(grade)
codes
Ici, 1 et 2 sont des codes de catégorie, car l’ordre a été choisi explicitement. Ils ne signifient pas que high vaut deux fois low. Pour une correspondance propre à un métier ou à un modèle, une table de recherche nommée est plus claire :
grade <- c("low", "high", "low")
score <- c(low = 10, high = 20)[grade]
score
Cette méthode rend visible la signification de chaque valeur numérique et évite de dépendre de l’ordre par défaut des niveaux du facteur.
Traiter les étiquettes non numériques, les valeurs manquantes et les avertissements
La conversion via des caractères ne peut pas transformer des étiquettes arbitraires en nombres. Le texte non numérique devient NA et R émet un avertissement de coercition ; une valeur déjà manquante le reste :
f <- factor(c("12.5", "oops", NA))
values <- as.numeric(as.character(f))
values
is.na(values)
Considérez les valeurs NA inattendues comme un signal de mauvaise qualité des données. Vérifiez les étiquettes d’origine, supprimez ou normalisez les espaces si nécessaire et décidez du traitement des enregistrements non valides avant l’analyse. Ne les remplacez pas silencieusement par zéro. Si les étiquettes sont catégorielles et non numériques, utilisez une correspondance explicite ou un facteur dont l’ordre est explicitement défini.
Vérifier la conversion
Avant de vous fier au résultat, vérifiez la classe source, les niveaux, les valeurs converties et les éventuels avertissements. La règle synthétique est la suivante :
- utilisez
as.numeric(f)pour des codes de facteur intentionnels ; - utilisez
as.numeric(as.character(f))pour des étiquettes numériques ; - utilisez un ordre explicite ou une correspondance nommée pour les catégories ; et
- examinez les valeurs
NAaprès la conversion de texte importé.
Le code R moderne doit définir délibérément les types d’importation ou les niveaux du facteur plutôt que de dépendre d’anciens réglages par défaut concernant la conversion des chaînes en facteurs. Ces vérifications clarifient le sens attendu de chaque résultat numérique.