如何在R中读取这些文件?

时间:2014-04-23 02:53:42

标签: r

我有数百个文本文件,每个文件中包含以下信息:

*****Auto-Correlation Results******
1     .09    -.19     .18     non-Significant

*****STATISTICS FOR MANN-KENDELL TEST******
S=  609
VAR(S)=      162409.70
Z=           1.51
Random : No trend at 95%

*****SENs STATISTICS ******
SEN SLOPE =  .24

我正在使用此代码阅读它们。我想阅读所有这些文件,并且"收集"来自每个文件的Sen's统计信息(例如.24)并将其与相应的文件名一起编译成一个文件。

require(gtools)
GG <- grep("*.txt", list.files(), value = TRUE)
GG<-mixedsort(GG)
S <- sapply(seq(GG), function(i){
    X <- readLines(GG[i])
    grep("SEN SLOPE", X, value = TRUE)
    })
spl <- unlist(strsplit(S, ".*[^(-|\\s).0-9]"))
SenStat <- as.numeric(spl[nzchar(spl)])
SenStat<-data.frame( SenStat,file = GG)
write.table(SenStat, "sen.csv",sep = ", ",row.names = FALSE)

但现在我收到了这个错误:

Error in strsplit(S, ".*[^(-|\\s).0-9]") : non-character argument

有人可以帮忙吗?感谢。

1 个答案:

答案 0 :(得分:0)

这不是this bounty question的副本吗? 无论如何:在这里重新发表我的答案!

步骤1:将完整fileNames保存在单个变量中:

fileNames <- dir(dataDir,full.names=TRUE)

步骤2:让我们读取并处理其中一个文件,并确保它给出正确的结果:

data.frame(
  file=basename(fileNames[1]), 
  SEN.SLOPE= as.numeric(tail(
    strsplit(grep('SEN SLOPE',readLines(fileNames[1]),value=T),"=")[[1]],1))
  )

步骤3:在所有fileNames

上执行此操作
do.call(
  rbind,
  lapply(fileNames, 
         function(fileName) data.frame(
           file=basename(fileName), 
           SEN.SLOPE= as.numeric(tail(
             strsplit(grep('SEN SLOPE',
                           readLines(fileName),value=T),"=")[[1]],1)
             )
           )
         )
  )

希望这会有所帮助!!