Problema al convertir de factor a variable numérica en R [cerrado]

11

Me gustaría convertir una variable de factor en una numérica, pero as.numericno tiene el efecto que esperaba.

A continuación obtengo estadísticas de resumen para la versión numérica de la variable basada en la variable original. Los medios siguen contando por 1 ... ¿tal vez (especula) que los niveles del factor tienen nombres y números, y espero que el valor de la nueva variable provenga del nombre cuando as.numericestá diseñado para usar el número?

> 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
--------------------------------------------------------- 
Michael Bishop
fuente
1
Eliminé las nuevas etiquetas que agregaste; me parecieron demasiado generales y no discriminatorios, o en el caso de as.factor demasiado estrecho (ya que es una función en base R). Vuelva a marcar si cree que algo se perdió.
JMS

Respuestas:

28

Eso es correcto: as.numeric(factor)devuelve el número que R asigna al nivel de ese factor. Tu podrías intentaras.numeric(as.character(factor))

Ricardo
fuente
44
Como sugiere esta respuesta, se recomienda stackoverflow.com/a/3418192/476907 as.numeric(levels(f))[f] y un poco más eficiente queas.numeric(as.character(f))
discipulus
¡Gracias! Esta respuesta me ayudó mucho :)
Yasha
13

Esta es la pregunta frecuente 7.10 en las preguntas frecuentes de R. Sí, un factor se almacena como los enteros del 1 al número de niveles y as.numeric proporciona los códigos subyacentes. Las preguntas frecuentes ofrecen 2 formas de convertir a numérico.

Sin embargo, por lo general esto se debe a que cuando leía los datos había algo en sus datos que hizo que R lo tratara como un factor en lugar de números (a menudo un carácter no numérico parásito). A menudo es mejor corregir los datos sin procesar (la conversión convertirá la pieza no numérica a NA) o usar el argumento colClasses si se usa read.table o similar.

Greg Snow
fuente
1
values.tmp <- sapply (possibleValues, as.numeric); values.nonnumeric <- values.tmp [is.na (values.tmp)]
russellpierce