作为一个例子,我想要一个迭代数据帧中的列并打印出每列的数据类型的函数(例如,“数字”,“整数”,“字符”等)
如果没有变量,我知道我可以class(df$MyColumn)
获取数据类型。如何更改它以便“MyColumn”是一个变量?
我正在尝试的是
f <- function(df) {
for(column in names(df)) {
columnClass = class(df[column])
print(columnClass)
}
}
但这只是为每列打印出[1] "data.frame"
。
答案 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)