确定数据框的列的数据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"
有关class
, typeof
和中间子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的灵感来自@Cybernetic的答案 。