¿Cómo obtengo las clases de todas las columnas en un marco de datos?

85

¿Cuál es una manera fácil de averiguar de qué clase pertenece cada columna en un marco de datos?

Kyle Brandt
fuente

Respuestas:

91

Una opción es usar lapplyy class. Por ejemplo:

> foo <- data.frame(c("a", "b"), c(1, 2))
> names(foo) <- c("SomeFactor", "SomeNumeric")
> lapply(foo, class)
$SomeFactor
[1] "factor"

$SomeNumeric
[1] "numeric"

Otra opcion es str:

> str(foo)
'data.frame':   2 obs. of  2 variables:
 $ SomeFactor : Factor w/ 2 levels "a","b": 1 2
 $ SomeNumeric: num  1 2
Kyle Brandt
fuente
20
Tambiénsapply(foo, class)
MYaseen208
9
Dado que classdevuelve un vector de caracteres de todas las clases de las que hereda un objeto, la salida de sapply(foo, class)podría ser una lista y no siempre un vector de caracteres como la mayoría de la gente esperaría. Lo que puede ser un poco peligroso ... Me parece lapplymucho más seguro.
flodel
1
para una mejor legibilidad, sugiero: lo unlist(lapply(foo, class))cual es útil con marcos de datos con muchas columnas.
p130ter
1
unlistwith lapplyes una idea terrible porque es posible que length(class(x))>1 (ver comentarios arriba) - sapplysea ​​mucho más seguro que unlist + lapply. una forma segura sería sapply(lapply(foo, class), "[", 1), dado que foo es un marco de datos
lebatsnok
27

Puede hacer uso simple lapplyo sapplyfunciones integradas.

lapplyte devolverá un list-

lapply(dataframe,class)

while sapplytomará el mejor tipo de retorno posible ex. Vector, etc.

sapply(dataframe,class)

Ambos comandos le devolverán todos los nombres de las columnas con su clase respectiva.

Rohit Saini
fuente
1

Hola buscaba lo mismo, y podría ser también

unlist(lapply(mtcars,class))
Seyma Kalay
fuente
0

También puede usar purrr, que es similar a las applyfunciones familiares:

as.data.frame(purrr::map_chr(mtcars, class))
purrr::map_df(mtcars, class)
AlexB
fuente