我在tmp目录中有一个.stat文件列表。
样品:
a.stat =>
abc,10
abc,20
abc,30
Run Code Online (Sandbox Code Playgroud)
b.stat =>
xyz,10
xyz,30
xyz,70
Run Code Online (Sandbox Code Playgroud)
等等
我需要找到所有.stat文件的摘要。目前我正在使用
filelist<-list.files(path="/tmp/",pattern=".stat")
data<-sapply(paste("/tmp/",filelist,sep=''), read.csv, header=FALSE)
但是,我需要对正在读取的所有文件应用摘要。或者只是在n个.stat文件中,我需要第二列的摘要
使用
data<-sapply(paste("/tmp/",filelist,sep=''), summary, read.csv, header=FALSE)
不起作用,并给我带有班级角色的摘要,这不是我想要的。
sapply(filelist, function(filename){df <- read.csv(filename, header=F);print(summary(df[,2]))})
工作正常。但是,我的总体目标是找到两边(异常值)相差超过2个标准偏差的值。因此,我使用sd,但同时需要检查当前读取的文件中的所有值是否都在2SD范围内。
一次应用多种功能:
f <- function(x){
list(sum(x),mean(x))
}
sapply(x, f)
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您想按顺序应用它们,因此首先读取csv数据,然后进行摘要:
sapply(lapply(paste("/tmp/",filelist,sep=''), read.csv), summary)
Run Code Online (Sandbox Code Playgroud)
要对数据集进行子集化以在特定列上运行摘要,可以使用将外部应用功能从更改summary
为function(x) summary(x[[2]])
。
对于您不想保存在环境中的短函数,也可以在 sapply 调用中完成。对于 @flxflks 的示例:
sapply(df, function(x) c(min = min(x), avg = mean(x)))
Run Code Online (Sandbox Code Playgroud)