【问题标题】:R extract variable from multiple dataframe in loopR从循环中的多个数据帧中提取变量
【发布时间】:2012-09-16 23:33:42
【问题描述】:

我有很多参数研究的结果要分析。幸运的是,有一个保存输出文件的输出文件。我需要保存文件名。我使用了这个程序:

IndexJobs<-read.csv("C:/Users/.../File versione7.1/
  "IndexJobs.csv",sep=",",header=TRUE,stringsAsFactors=FALSE)

dir<-IndexJobs$WORKDIR
Dir<-gsub("\\\\","/",dir)
Dir1<-gsub(" C","C",Dir)

现在我使用 e for 来读取 CSV 并创建不同的数据框

for(i in Dir1){
  filepath <- file.path(paste(i,"eplusout.csv",sep=""))
  dat<-NULL
  dat<-read.table(filepath,header=TRUE,sep=",")
  filenames <- substr(filepath,117,150)
  names <-substr(filenames,1,21)
  assign(names, dat)
  }

现在我想从每个数据库中提取选定的变量,并将每个数据库的每个变量放在单独的数据库中。我还将变量和单个数据库的名称联合起来,以便有一个清晰的数据库进行一些分析。我试着做点什么,但结果很糟糕。 我尝试插入其他行:

 for(i in Dir1){
  filepath <- file.path(paste(i,"eplusout.csv",sep=""))
  dat<-NULL
  dat<-read.table(filepath,header=TRUE,sep=",")
  filenames <- substr(filepath,117,150)
  names <-substr(filenames,1,21)
  assign(names, dat)
  datTest<-dat$X5EC132.Surface.Outside.Face.Temperature..C..TimeStep.
  nameTest<-paste(names,"_Test",sep="")
  assign(nameTest,datTest)
  DFtest=c[,nameTest]
}

但是对于每个 i 都会覆盖 DFtest,并且只保留最后一个数据库列。

有什么建议吗?谢谢

【问题讨论】:

    标签: r for-loop import lapply


    【解决方案1】:

    如果您将DFtest=c[,nameTest] 替换为

    ,它可能会起作用
    DFtest[nameTest] <- get(nameTest)
    

    或者,或者,

    DFtest[nameTest] <- datTest
    

    此过程假定对象 DFtest 在您运行循环之前存在。


    另一种方法是在运行循环之前创建一个空列表:

    DFtest <- list()
    

    在循环中,可以使用以下命令:

    DFtest[[nameTest]] <- datTest
    

    循环之后,列表DFtest中的所有值都可以使用

    do.call("cbind", DFtest)
    

    请注意,这仅在列表 DFtest 中的所有向量具有相同长度时才有效。

    【讨论】:

    • 感谢您的建议。我有不同的向量长度,该方法有效,但较短的向量复制向量的最后一个元素,直到达到最长的长度。我正在尝试采用其他方式:按行合并文件并使用 plyr 库。