使用R在Loop中合并表

时间:2012-06-13 17:24:56

标签: r loops

我有一个关于我写的循环的简单问题。我想访问不同目录中的不同文件,并从这些文件中提取数据并合并到一个表中。我的问题是我的循环不是添加不同文件的结果,而是仅使用当前循环中的物种进行更新。这是我的代码:

for(i in 1:length(splist.par))
{ 

  results<-read.csv(paste(getwd(),"/ResultsR10arcabiotic/",splist.par[i],"/","maxentResults.csv",sep=""),h=T)

  species <- splist.par[i]
  AUC <- results$Test.AUC[1:10]
  AUC_SD <- results$AUC.Standard.Deviation[1:10]
  Variable <- "a"
  Resolution <- "10arc"
  table <-cbind(species,AUC,AUC_SD,Variable,Resolution)
}

这可能是一个简单的问题,但我不是一位经验丰富的程序员。感谢您的关注 加布里埃尔

2 个答案:

答案 0 :(得分:2)

我使用lapply从每个文件中获取所需数据并添加Species信息,然后与rbind结合使用。像这样(未经测试):

do.call(rbind, lapply(splist.par, function(x) {
  d <- read.csv(file.path("ResultsR10arcabiotic", x, "maxentResults.csv"))
  d <- d[1:10, c("Test.AIC", "AIC.Standard.Deviation")] 
  names(d) <- c("AUC", "AUC_SD")
  cbind(Species=x, d, stringsAsFactors=FALSE)
}))

答案 1 :(得分:2)

@Aaron的lapply答案很好,很干净。但要调试代码:您将大量数据放入table,但每次都覆盖table。你需要做

table <-cbind(table, species,AUC,AUC_SD,Variable,Resolution) 

BTW,因为table是R中的函数,所以我避免将它用作变量名。想象一下:

table(table)

: - )