seleccionar filtrar filas extraer eliminar datos data contar columnas columna agregar r character

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)