从名为模式

时间:2015-05-07 07:44:55

标签: r

我有一个CSV格式的文件列表,例如:

  

20150507.csv

a,10 
b,20 
c,30 
  

20150506.csv

a,100 
b,20 
c,1 

等等。我有一个包含变量名称的文本文件:

  

LIST.TXT

a 
b 
c 
d 

我需要以list.txt文件中包含变量值的方式导入数据:

a: 10, 100,... 
b: 20, 20, ... 
c: 30, 1, ... 

从与日期名称模式匹配的所有CSV文件中搜索元素的值(来自list.txt),并且在收集所有值之后,我需要计算每个变量的均值和标准差,并标记观察值与异常值相比,平均值超过2 SD。

目前我正在使用bash命令为list.txt的每个元素创建统计信息,然后在R中加载数据。

for i in `cat list.txt |cut -d, -f1`; do echo "$i";grep "^$i" 2015* | cut -d: -f2 > /tmp/$i.stat;done 

然后在R中使用for循环来查找异常值:

files=list.files(path="/tmp/",pattern=".stat")

for( i in 1:length( files)){
    myfunction(paste("/tmp/",files[[i]],sep='')
}

myfunction(filename)
    {df <- read.csv(filename, header=F); 
    names(df)=c("symbol","num");

    x=df[abs(df$num-mean(df$num))>2*sd(df[,2]),];outl=(nrow(x)/nrow(df))*100;if(outl>1){cat(filename,"\n");

    cat("outliers=",outl);cat("\n\n") 

但是,我只想在R中完成整个过程,而不是通过bash创建多个文件,然后使用for循环读取它们。

我读了this grep manual for R,但是没有显示搜索多个文件选项。

编辑:

我没有使用for,而是使用了:

df <- do.call(rbind, lapply(list.files(path="/tmp/",pattern = "*.stat"), read.csv,header=FALSE)) 

这看起来更好。

然而df2 <- do.call(rbind, lapply(list.files(path="/orignal/dir/",pattern = "2015*.abc.csv"), read.csv,header=FALSE))并不能让R了解我正在搜索名称以2015 *开头并以abc.csv结尾的所有文件

0 个答案:

没有答案