2011-09-30 8 views
27

Duplicar posible:
R - How to convert a factor to an integer\numeric in R without a loss of information(no parece as.numeric() para trabajar) La conversión de un factor numérico que sin perder la información R

El siguiente hecho sobre el AS. función numérica() se ha llamado la atención

> blah<-c("4","8","10","15") 
> blah 
[1] "4" "8" "10" "15" 
> blah.new<-as.factor(blah) 
> blah.new 
[1] 4 8 10 15 
Levels: 10 15 4 8 
> blah.new1<-as.numeric(blah.new) 
> blah.new1 
[1] 3 4 1 2 

cuando convierto un factor con niveles 4, 8, 1 0 y 15 a una variable cuantitativa usando as.numeric(), cada número se convierte en una clasificación, y los valores originales se pierden.

¿Cómo tomo el vector 'bla.new' que tiene los niveles 10,15, 4 y 8, y lo convierto a los valores numéricos 10, 15, 4 y 8?

(Este problema ha surgido debido a un conjunto de datos en una variable cuantitativa es leído por read.table() para ser un factor)

Gracias !!!!

***** Actualización: lo descubrió ******

blah.new1<-as.numeric(as.character(blah.new)) 

Sin embargo, me pregunto en qué documentación para as.numeric() es lo que dice que esta función convierte en argumentos una lista de clasificaciones?

+1

Esto está documentado en la sección ** Advertencia ** de '? Factor' – Andrie

+1

Y también está en las R-FAQ. –

+1

Pero no está en ninguno de los libros R que hojeo y seguro que me lanzó a un bucle en este momento. – Amanda

Respuesta

26

Primero, el factor consiste en índices y niveles. Este hecho es muy importante cuando luchas con el factor.

Por ejemplo,

> z <- factor(letters[c(3, 2, 3, 4)]) 

# human-friendly display, but internal structure is invisible 
> z 
[1] c b c d 
Levels: b c d 

# internal structure of factor 
> unclass(z) 
[1] 2 1 2 3 
attr(,"levels") 
[1] "b" "c" "d" 

aquí, z tiene 4 elementos.
El índice es 2, 1, 2, 3 en ese orden.
El nivel está asociado con cada índice: 1 -> b, 2 -> c, 3 -> d.

Luego, as.numeric convierte simplemente el índice parte del factor en numérico.
as.character maneja el índice y los niveles, y genera un vector de caracteres expresado por su nivel.

?as.numeric dice que Los factores se manejan por el método predeterminado.

Cuestiones relacionadas