¿Cuál es una manera fácil de averiguar de qué clase pertenece cada columna en un marco de datos?
85
Una opción es usar lapply
y 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
sapply(foo, class)
class
devuelve un vector de caracteres de todas las clases de las que hereda un objeto, la salida desapply(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 parecelapply
mucho más seguro.unlist(lapply(foo, class))
cual es útil con marcos de datos con muchas columnas.unlist
withlapply
es una idea terrible porque es posible quelength(class(x))>1
(ver comentarios arriba) -sapply
sea mucho más seguro queunlist + lapply
. una forma segura seríasapply(lapply(foo, class), "[", 1)
, dado que foo es un marco de datosPuede hacer uso simple
lapply
osapply
funciones integradas.lapply
te devolverá unlist
-while
sapply
tomará el mejor tipo de retorno posible ex. Vector, etc.Ambos comandos le devolverán todos los nombres de las columnas con su clase respectiva.
fuente
Hola buscaba lo mismo, y podría ser también
fuente
También puede usar
purrr
, que es similar a lasapply
funciones familiares:fuente