¿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?

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

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.


1

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

unlist(lapply(mtcars,class))

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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.