将循环中创建的表绑定在一起

时间:2018-04-16 09:28:23

标签: r rbind cbind

我设法创建一个循环,打开我在文件夹中的csv文件,并在第一列中添加文件名。但是,我不知道如何将所有创建的表放在一起,以便循环后的最终输出是一个data.frame与所有csv一起(文件名作为第一列)。我尝试使用cbind,但它不起作用。任何帮助都感激不尽。这是我的尝试:

   <div class='fieldcontain typeCauses'>
    <label for='typeCause.label'>
      <g:message code='typeCause.label' />
    </label>
    <g:select from='${TypeCause.list()}' multiple='true' name='typeCauses' optionKey='id' value='${clientInstance?.typeCauses*.id}'></g:select>
  </div>

1 个答案:

答案 0 :(得分:18)

尝试这种方式:

1 - 在for-loop

之外定义temp
temp<-NULL

2 - 在for循环中分配temp2,如下所示:

temp[[a]]=temp2 

3 - 在for循环之后绑定所有data.frames:

library(dplyr)
output<-bind_rows(temp)

完整代码已审核:

csvfilenames <- list.files("/Users/carlos/Desktop/TestCSVFilesToMerge/",
                   pattern="*.csv", all.files=FALSE, full.names=FALSE) #creates a list with the file names
csvfilenames

temp<-NULL

for(i in 1:length(csvfilenames)) 

{
a=csvfilenames[i]
temp1<-read.csv(file=paste("/Users/carlos/Desktop/TestCSVFilesToMerge/",a,sep=""),sep=";", header=T)
temp2<-cbind("FileName"=a,temp1[,1:ncol(temp1)]) #add a column called FileName in position 1
temp[[a]]=temp2 
}

library(dplyr)
output<-bind_rows(temp)