我使用R并使用read.csv()将数据加载到数据帧中。如何确定数据帧中每一列的数据类型?
当前回答
为了方便使用数据框架,这里有一个简单的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
其他回答
开始时最好使用?str()。为了探索一些例子,让我们制作一些数据:
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])
@Wilmer E Henao H的解决方案非常精简:
sapply(my.data, class)
y x1 x2 X3
"numeric" "integer" "logical" "factor"
使用str()可以得到这些信息和额外的好处(比如因子的级别和每个变量的前几个值):
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
@Gavin Simpson的方法也简化了,但提供的信息与class()略有不同:
sapply(my.data, typeof)
y x1 x2 X3
"double" "integer" "logical" "integer"
有关class、typeof和中间子元素mode的更多信息,请参阅这个优秀的SO线程:R中事物类型的全面调查。'mode'和'class'和'typeof'是不够的。
我建议
sapply(foo, typeof)
如果你需要数据帧中向量的实际类型。Class()有点不同。
如果你不需要作为一个向量来获取这个信息(也就是说,你不需要它来做其他的编程),只需要使用str(foo)。
在这两种情况下,foo将被替换为数据帧的名称。
sapply(yourdataframe, class)
你的dataframe是你正在使用的数据帧的名称
另一种选择是使用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)