filas - filtrar datos en r
convertir formato de columna data.frame de carácter a factor (6)
Estoy programando en lenguaje R. Me gustaría cambiar el formato (clase) de algunas columnas de mi objeto mydf
( mydf
) de charactor a factor . No quiero hacer esto cuando estoy leyendo el archivo de texto por la función read.table()
. Cualquier ayuda sería apreciada.
Hola, bienvenido al mundo de R.
mtcars #look at this built in data set
str(mtcars) #allows you to see the classes of the variables (all numeric)
#one approach it to index with the $ sign and the as.factor function
mtcars$am <- as.factor(mtcars$am)
#another approach
mtcars[, ''cyl''] <- as.factor(mtcars[, ''cyl''])
str(mtcars) # now look at the classes
Esto también funciona para personajes, fechas, enteros y otras clases
Como eres nuevo en R, te sugiero que eches un vistazo a estos dos sitios web:
R manuales de referencia: http://cran.r-project.org/manuals.html
R Tarjeta de referencia: http://cran.r-project.org/doc/contrib/Short-refcard.pdf
Lo estoy haciendo con una función. En este caso, solo transformaré las variables de caracteres en factor:
for (i in 1:ncol(data)){
if(is.character(data[,i])){
data[,i]=factor(data[,i])
}
}
Otra manera breve que podría usar es una tubería ( %<>%
) del paquete magrittr . Convierte la columna de caracteres mycolumn en un factor.
library(magrittr)
mydf$mycolumn %<>% factor
Puede usar dplyr::mutate_if()
para convertir todas las columnas de caracteres o dplyr::mutate_at()
para seleccionar columnas de caracteres nombrados para factores:
library(dplyr)
# all character columns to factor:
df <- mutate_if(df, is.character, as.factor)
# select character columns ''char1'', ''char2'', etc. to factor:
df <- mutate_at(df, vars(char1, char2), as.factor)
Si desea cambiar todas las variables de caracteres en su data.frame a los factores una vez que haya cargado sus datos, puede hacerlo de esta manera, a un data.frame llamado dat
:
character_vars <- lapply(dat, class) == "character"
dat[, character_vars] <- lapply(dat[, character_vars], as.factor)
Esto crea un vector que identifica qué columnas son de character
de clase y luego se aplica como as.factor
a esas columnas.
Data de muestra:
dat <- data.frame(var1 = c("a", "b"),
var2 = c("hi", "low"),
var3 = c(0, 0.1),
stringsAsFactors = FALSE
)
# To do it for all names
df[] <- lapply( df, factor) # the "[]" keeps the dataframe structure
col_names <- names(df)
# do do it for some names in a vector named ''col_names''
df[col_names] <- lapply(df[col_names] , factor)
Explicación. Todos los dataframes son listas y los resultados de [
usados con argumentos de múltiples valores son igualmente listas, por lo que la tarea de lapply
bucles es sobre la lista. La asignación anterior creará un conjunto de listas que la función data.frame.[<-
debería volver a insertarse con éxito en el dataframe, df
Otra estrategia sería convertir solo aquellas columnas donde el número de elementos únicos es menor que algún criterio, digamos menos que el registro de la cantidad de filas como ejemplo:
cols.to.factor <- sapply( df, function(col) length(unique(col)) < log10(length(col)) )
df[ cols.to.factor] <- lapply(df[ cols.to.factor] , factor)