J'aimerais convertir une variable de facteur en une variable numérique mais as.numeric
n'a pas l'effet que j'attends.
Ci-dessous, j'obtiens des statistiques récapitulatives pour la version numérique de la variable basée sur la variable d'origine. Les moyens continuent de compter par 1 ... peut-être (il spécule) que les niveaux du facteur ont des noms et des nombres, et je m'attends à ce que la valeur de la nouvelle variable provienne du nom quand as.numeric
est-il conçu pour utiliser le nombre?
> describe.by(as.numeric(df$sch), df$sch)
group:
var n mean sd median trimmed mad min max range skew kurtosis se
1 1 5389 1 0 1 1 0 1 1 0 NaN NaN 0
---------------------------------------------------------
group: 001
var n mean sd median trimmed mad min max range skew kurtosis se
1 1 19 2 0 2 2 0 2 2 0 NaN NaN 0
---------------------------------------------------------
group: 002
var n mean sd median trimmed mad min max range skew kurtosis se
1 1 54 3 0 3 3 0 3 3 0 NaN NaN 0
---------------------------------------------------------
r
data-transformation
Michael Bishop
la source
la source
Réponses:
C'est exact:
as.numeric(factor)
renvoie le nombre que R attribue au niveau de ce facteur. Tu pourrais essayeras.numeric(as.character(factor))
la source
as.numeric(levels(f))[f]
est recommandé et légèrement plus efficace queas.numeric(as.character(f))
Il s'agit de la FAQ 7.10 de la Foire aux questions. Oui, un facteur est stocké sous forme d'entiers de 1 au nombre de niveaux et as.numeric donne les codes sous-jacents. La FAQ donne 2 façons de convertir en numérique.
Cependant, cela est généralement dû au fait que lorsque vous lisez les données, il y a quelque chose dans vos données qui fait que R les traite comme un facteur plutôt que des nombres (souvent un caractère non numérique errant). Il est souvent préférable de corriger les données brutes (la conversion convertira la pièce non numérique en NA) ou d'utiliser l'argument colClasses si vous utilisez read.table ou similaire.
la source