如何通过变量索引数据框列?

时间:2012-03-13 15:54:16

标签: r types dataframe

作为一个例子,我想要一个迭代数据帧中的列并打印出每列的数据类型的函数(例如,“数字”,“整数”,“字符”等)

如果没有变量,我知道我可以class(df$MyColumn)获取数据类型。如何更改它以便“MyColumn”是一个变量?

我正在尝试的是

f <- function(df) {

 for(column in names(df)) {
   columnClass = class(df[column])
   print(columnClass)
 }

}

但这只是为每列打印出[1] "data.frame"

4 个答案:

答案 0 :(得分:6)

由于数据框只是一个列表,您可以使用lapply遍历列并将class函数应用于每列:

lapply(df, class)

要解决用户评论中之前未说出的问题....如果您构建了一个 的函数,那么您希望某个列,那么成功:

func <- function(col) {print(class(col))}
lapply(df, func)

这实际上大部分相当于:

 for(col in names(df) ) { print(class(df[[col]]))} 

并且不会有一个不需要的'colClass'变量使.GlobalEnv混乱。

答案 1 :(得分:2)

column之前使用逗号:

for(column in names(df)) {
   columnClass = class(df[,column])
   print(columnClass)
 }

答案 2 :(得分:1)

就像DWin建议的那样

apply(df,2,class)

但是你说你想对每个coloumn做更多的事情吗? 你想让我做什么。尽量避免抽象的例子。 万一有帮助

apply(df,2,mean)
apply(df,2,sd)

或更复杂的东西

apply(df,2,function(x){s = c(summary(x)["Mean"], summary(x)["Median"], sd(x))})

请注意,摘要函数无论如何都会为您提供大部分功能,但这只是一个示例。任何函数都可以放在apply中,并迭代在矩阵或数据帧的cols上。该功能可以像您需要的那样复杂或简单。

答案 3 :(得分:0)

您可以使用 plyr 包的 colwise 函数将任何函数转换为列式函数。这是 lapply 的包装。

library(plyr)

colwise.print.class<-colwise(.fun=function(col) {print(class(col))})

colwise.print.class(df)

您可以查看使用

创建的功能
print(colwise.print.class)