我在 tmp 目录中有一个 .stat 文件列表。
样本:
a.stat =>
abc,10
abc,20
abc,30
b.stat=>
xyz,10
xyz,30
xyz,70
等等
我需要找到所有 .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)
在您的情况下,您希望按顺序应用它们,因此首先读取 csv 数据然后进行汇总:
sapply(lapply(paste("/tmp/",filelist,sep=''), read.csv), summary)
要对数据集进行子集化以在特定列上运行汇总,您可以使用将外部 sapply 函数从
summary
更改为 function(x) summary(x[[2]])
。关于r - 在 sapply 中应用多个功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30053266/