确定数据框的列的数据types

我正在使用R并使用read.csv()将数据加载到数据read.csv() 。 如何确定数据框中每列的数据types?

最好的select是使用?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的解决scheme非常精简:

 sapply(my.data, class) y x1 x2 X3 "numeric" "integer" "logical" "factor" 

使用str()可以获得这些信息和额外的好东西(比如你的因子水平和每个variables的前几个值):

 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" 

有关classtypeof和中间子mode更多信息,请参阅这个优秀的SO线程: 对“模式”,“类”和“types”中的事物types进行全面的调查是不够的 。

 sapply(yourdataframe, class) 

其中yourdataframe是您正在使用的数据框的名称

我会build议

 sapply(foo, typeof) 

如果您需要数据框中的实际types的向量。 class()是有些不同的野兽。

如果你不需要得到这个信息作为一个向量(也就是说,你不需要它以后以编程方式做其他事情),只需要使用str(foo)

在这两种情况下, foo都将被replace为您的数据框的名称。

这是一个函数,它是helpRFunctions包的一部分,它将返回数据框中所有各种数据types的列表,以及与该types关联的特定variables名称。

 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 

然后你可以做一些像var(my.data[t$numeric])

希望这是有帮助的!

只需将您的数据框传递给以下函数:

 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") } 

生成数据框中所有数据types的图表。 对于虹膜数据集,我们得到以下结果:

在这里输入图像说明

由于没有明确说明,我只是补充一点:

我正在寻找一种方法来创build一个表,其中包含所有数据types的出现次数。

假设我们有一个包含两个数字和一个逻辑列的data.frame

 dta <- data.frame(a = c(1,2,3), b = c(4,5,6), c = c(TRUE, FALSE, TRUE)) 

你可以总结出每种数据types的列数

 table(unlist(lapply(dta, class))) # logical numeric # 1 2 

这非常方便,如果你有很多列,并希望得到一个快速的概述。

给予信用:这个解决scheme的灵感来自@Cyber​​netic的答案 。