【问题标题】:How do I read these files in R?如何在 R 中读取这些文件?
【发布时间】:2014-04-23 02:53:41
【问题描述】:

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

*****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

我正在使用此代码阅读它们。我想读取所有这些文件,并从每个文件(例如 .24)中“收集”Sen 的统计信息,并与相应的文件名一起编译成一个文件。

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

有人可以帮忙吗?谢谢。

【问题讨论】:

  • S 可能是一个因素,请尝试在您的 strsplit(S, ".*[^(-|\\s).0-9]") 调用中将其包装为 as.character(S)。另一种选择:如果 Sen Slope 始终在同一行,您可以读取文件并提取该行(行号)
  • 您从the last time I answered this question 更改了很多代码。我什至只是为你检查了它。什么给了?
  • 嗨,理查德,这不是同一个代码吗?我无法区分。我只添加了混合排序。能否请你帮忙? :(
  • 在另一篇文章的“TO LOOP OVER MULTIPLE FILES”之后复制并粘贴代码。 mixedsort 不在我的答案中。
  • 这一行:grep("SEN SLOPE", X, value = TRUE) 什么都不做。它的值未分配,将被垃圾回收。

标签: r


【解决方案1】:

这不是与this bounty question 重复吗? 无论如何:在这里重新发布我的答案!

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

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

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

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)
             )
           )
         )
  )

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 1970-01-01
    • 2018-06-09
    • 2015-12-07
    • 2016-11-30
    • 2015-11-22
    • 2016-11-15
    • 2014-09-23
    • 1970-01-01
    相关资源
    最近更新 更多