我使用R并使用read.csv()将数据加载到数据帧中。如何确定数据帧中每一列的数据类型?
当前回答
要获得一个带有类型和类的漂亮Tibble:
purrr::map2_df(mtcars,names(mtcars), ~ {
tibble(
field = .y,
type = typeof(.x),
class_1 = class(.x)[1],
class_2 = class(.x)[2]
)
})
其他回答
因为说得不清楚,我补充一下:
我正在寻找一种方法来创建一个表,其中保存所有数据类型的出现次数。
假设我们有一个data.frame,有两个数字列和一个逻辑列
dta <- data.frame(a = c(1,2,3),
b = c(4,5,6),
c = c(TRUE, FALSE, TRUE))
您可以用它来总结每种数据类型的列数
table(unlist(lapply(dta, class)))
# logical numeric
# 1 2
如果您有很多列,并且想要快速浏览,那么这个方法非常方便。
这个解决方案的灵感来自@Cybernetic的答案。
另一种选择是使用purrr包的map函数。
library(purrr)
map(df,class)
简单地传递你的数据帧到下面的函数:
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")
}
生成数据帧中所有数据类型的图表。对于虹膜数据集,我们得到以下结果:
data_types(iris)
为了方便使用数据框架,这里有一个简单的base函数
col_classes <- function(df) {
data.frame(
variable = names(df),
class = unname(sapply(df, class))
)
}
col_classes(my.data)
variable class
1 y numeric
2 x1 integer
3 x2 logical
4 X3 character
要获得一个带有类型和类的漂亮Tibble:
purrr::map2_df(mtcars,names(mtcars), ~ {
tibble(
field = .y,
type = typeof(.x),
class_1 = class(.x)[1],
class_2 = class(.x)[2]
)
})