我在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范围内。
答案 0 :(得分:6)
一次应用多个功能:
f <- function(x){
list(sum(x),mean(x))
}
sapply(x, f)
在您的情况下,您希望按顺序应用它们,因此首先阅读csv数据然后执行摘要:
sapply(lapply(paste("/tmp/",filelist,sep=''), read.csv), summary)
要对数据集进行子集化以在特定列上运行摘要,您可以使用从summary
到function(x) summary(x[[2]])
的更改外部sapply函数。
答案 1 :(得分:1)
在@Jangorecki中,我将函数更改为包括向量而不是列表。只有这样,它对我有用。我不确定为什么我的功能可以正常工作,而其他却不能。
f <- function(x){
c(min = min(x), avg = mean(x))
}
sapply(df, f)
我在https://www.r-bloggers.com/applying-multiple-functions-to-data-frame/找到了解决方案
答案 2 :(得分:1)
对于不想在环境中保存的简短功能,也可以在sapply调用中完成。对于@flxflks的示例:
val animal: Animal<Dog> by DefaultDelegate()