versiones guia español descargar actualizar r numerical factors

guia - ¿Cómo convierto ciertas columnas de un marco de datos en factores?



qgis manual (2)

Posible duplicado:
identificar o codificar factores únicos utilizando R

Estoy teniendo problemas con R.

Tengo un conjunto de datos similar al siguiente, pero mucho más largo.

A B Pulse 1 2 23 2 2 24 2 2 12 2 3 25 1 1 65 1 3 45

Básicamente, las 2 primeras columnas están codificadas. A tiene 1, 2 que representan 2 pesos diferentes. B tiene 1, 2, 3 que representan 3 tiempos diferentes.

Como son valores numéricos codificados, R los tratará como variables numéricas. Necesito usar la función de factor para convertir estas variables en factores.

¿Ayuda?


Aquí hay un ejemplo:

#Create a data frame > d<- data.frame(a=1:3, b=2:4) > d a b 1 1 2 2 2 3 3 3 4 #currently, there are no levels in the `a` column, since it''s numeric as you point out. > levels(d$a) NULL #Convert that column to a factor > d$a <- factor(d$a) > d a b 1 1 2 2 2 3 3 3 4 #Now it has levels. > levels(d$a) [1] "1" "2" "3"

También puede manejar esto al leer en sus datos. Consulte los parámetros colClasses y stringsAsFactors en, por ejemplo, readCSV() .

Tenga en cuenta que, computacionalmente, el factoraje de tales columnas no le ayudará mucho, y en realidad puede ralentizar su programa (aunque de manera insignificante). El uso de un factor requerirá que todos los valores se asignen a las ID entre bastidores, por lo que cualquier impresión de su data.frame requiere una búsqueda en esos niveles, un paso adicional que lleva tiempo.

Los factores son excelentes cuando almacena cadenas que no desea almacenar repetidamente, sino que prefieren hacer referencia por su ID. Considere almacenar un nombre más amigable en tales columnas para beneficiarse completamente de los factores.


Dada la siguiente muestra

myData <- data.frame(A=rep(1:2, 3), B=rep(1:3, 2), Pulse=20:25)

entonces

myData$A <-as.factor(myData$A) myData$B <-as.factor(myData$B)

o puede seleccionar sus columnas por completo y envolverlas bien:

# select columns cols <- c("A", "B") myData[,cols] <- data.frame(apply(myData[cols], 2, as.factor)) levels(myData$A) <- c("long", "short") levels(myData$B) <- c("1kg", "2kg", "3kg")

Para obtener

> myData A B Pulse 1 long 1kg 20 2 short 2kg 21 3 long 3kg 22 4 short 1kg 23 5 long 2kg 24 6 short 3kg 25