2011-01-25 17 views
54

Estoy manipulando un marco de datos usando el paquete de remodelación. Cuando uso la función de fusión, factoriza mi columna de valor, que es un problema porque un subconjunto de esos valores son enteros sobre los que quiero poder realizar operaciones.Convertir factor en entero

¿Alguien sabe de una manera de forzar un factor en un número entero? Al usar as.character(), lo convertiré en el carácter correcto, pero luego no puedo realizar una operación en él, y as.integer() o as.numeric() lo convertirán al número que el sistema está almacenando ese factor, lo cual no es útil.

¡Gracias!

Jeff

+2

Esto es similar a http://stackoverflow.com/questions/3418128/r-how-to-convert-a-factor-to-an-integer-numeric-in-r-without-a-loss-of -informat – Aaron

Respuesta

53

Puede combinar las dos funciones; coaccionar a los caracteres numéricos de allí a:

> fac <- factor(c("1","2","1","2")) 
> as.numeric(as.character(fac)) 
[1] 1 2 1 2 
+0

Intenté esto, pero aparece el mensaje de advertencia: "NA introducida por coacción". ¿Qué significa esto? –

+0

¿O solo quiere decir que algunos de ellos no eran números para empezar? –

+1

@Jeff significa que algunos de los caracteres no son números, por lo que se convierten a 'NA' cuando se usa' as.numeric (....) '. Mire 'levels (fac)' y 'as.numeric (levels (fac))' reemplazando 'fac' con su variable de factor para ver cuáles están siendo forzados a' NA'. –

62

Citando directamente desde la página de ayuda para factor:

Transformar un factor f a sus valores numéricos originales, se recomienda as.numeric(levels(f))[f] y ligeramente más eficiente que as.numeric(as.character(f)).

+0

#bazinga. ¡La lectura es fundamental! – d8aninja