Estoy usando R y he cargado datos en un dataframe utilizando read.csv()
. ¿Cómo determino el tipo de datos de cada columna en el dataframe?
Su mejor apuesta para comenzar es usar ?str()
. Para explorar algunos ejemplos, hagamos algunos datos:
set.seed(3221) # this makes the example exactly reproducible my.data <- data.frame(y=rnorm(5), x1=c(1:5), x2=c(TRUE, TRUE, FALSE, FALSE, FALSE), X3=letters[1:5])
La solución de @Wilmer E Henao H está muy simplificada:
sapply(my.data, class) y x1 x2 X3 "numeric" "integer" "logical" "factor"
El uso de str()
le proporciona esa información más elementos extra (como los niveles de sus factores y los primeros valores de cada variable):
str(my.data) 'data.frame': 5 obs. of 4 variables: $ y : num 1.03 1.599 -0.818 0.872 -2.682 $ x1: int 1 2 3 4 5 $ x2: logi TRUE TRUE FALSE FALSE FALSE $ X3: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
El enfoque de @Gavin Simpson también se simplifica, pero proporciona información ligeramente diferente a la class()
:
sapply(my.data, typeof) y x1 x2 X3 "double" "integer" "logical" "integer"
Para obtener más información sobre class
, typeof
y middle child, mode
, consulte este excelente hilo SO: una encuesta exhaustiva de los tipos de cosas en R. 'mode' y 'class' y 'typeof' son insuficientes .
sapply(yourdataframe, class)
Donde yourdatame es el nombre del dataframe que está usando
Yo sugeriría
sapply(foo, typeof)
si necesita los tipos reales de los vectores en el dataframe. class()
es algo así como una bestia diferente.
Si no necesita obtener esta información como un vector (es decir, no necesita hacer otra cosa programáticamente más adelante), simplemente use str(foo)
.
En ambos casos, foo
se reemplazará por el nombre de su dataframe.
Simplemente pase su dataframe a la siguiente función:
data_types <- function(frame) { res <- lapply(frame, class) res_frame <- data.frame(unlist(res)) barplot(table(res_frame), main="Data Types", col="steelblue", ylab="Number of Features") }
para producir un gráfico de todos los tipos de datos en su dataframe. Para el conjunto de datos del iris obtenemos lo siguiente:
data_types(iris)
Aquí hay una función que forma parte del paquete helpRFunctions que devolverá una lista de todos los diversos tipos de datos en su dataframe, así como los nombres de variables específicos asociados con ese tipo.
install.package('devtools') # Only needed if you dont have this installed. library(devtools) install_github('adam-m-mcelhinney/helpRFunctions') library(helpRFunctions) my.data <- data.frame(y=rnorm(5), x1=c(1:5), x2=c(TRUE, TRUE, FALSE, FALSE, FALSE), X3=letters[1:5]) t <- list.df.var.types(my.data) t$factor t$integer t$logical t$numeric
Entonces podría hacer algo como var(my.data[t$numeric])
.
Espero que esto sea útil!
Como no fue declarado claramente, simplemente agrego esto:
Estaba buscando una forma de crear una tabla que contenga la cantidad de apariciones de todos los tipos de datos .
Digamos que tenemos un data.frame
con dos data.frame
numéricas y una columna lógica
dta <- data.frame(a = c(1,2,3), b = c(4,5,6), c = c(TRUE, FALSE, TRUE))
Puede resumir el número de columnas de cada tipo de datos con ese
table(unlist(lapply(dta, class))) # logical numeric # 1 2
Esto es extremadamente útil, si tiene muchas columnas y desea obtener una visión general rápida.
Para dar crédito: esta solución fue inspirada por la respuesta de @Cybernetic .