enumerar todos los niveles de factores de un data.frame
con str(data)
obtengo los head
de los niveles (1-2 valores)
fac1: Factor w/ 2 levels ... :
fac2: Factor w/ 5 levels ... :
fac3: Factor w/ 20 levels ... :
val: num ...
Con dplyr::glimpse(data)
obtengo más valores, pero no hay información sobre el número/valores de los niveles de factores. ¿Existe una forma automática de obtener toda la información de nivel de todas las variables de factor en un marco de datos? Un breve formulario con más información para
levels(data$fac1)
levels(data$fac2)
levels(data$fac3)
o más precisamente una versión elegante para algo como
for (n in names(data))
if (is.factor(data[[n]])) {
print(n)
print(levels(data[[n]]))
}
gracias Christof
Aquí hay algunas opciones. Recorremos los 'datos' sapply
y obtenemos el levels
de cada columna (asumiendo que todas las columnas son factor
de clase)
sapply(data, levels)
O si necesitamos canalizarlo ( %>%
), esto se puede hacer como
library(dplyr)
data %>%
sapply(levels)
U otra opción es summarise_each
desde dplyr
donde especificamos el levels
dentro del funs
.
data %>%
summarise_each(funs(list(levels(.))))
Si su problema es específicamente generar una lista de todos los niveles para un factor, entonces encontré una solución simple usando:
único(df$x)
Por ejemplo, para el infame conjunto de datos del iris:
único(iris$Especie)
O usando ronroneo:
data %>% purrr::map(levels)
O primero factorizar todo:
data %>% dplyr::mutate_all(as.factor) %>% purrr::map(levels)
Y respondiendo a la pregunta sobre cómo obtener las longitudes:
data %>% map(levels) %>% map(length)