For-Loop读取并将多个.xlsx文件保存到一个文件

时间:2017-11-13 20:21:34

标签: r rbind

我循环遍历多个文件,其中每个文件都创建一个表。我想将每个表保存到一个文件中,以便将所有表保存在一起。这个想法是在每个文件运行之后,最终输出将附加到表中的前一个最终输出。我当前的代码循环遍历每个文件,但只获取文件夹中最后一个文件的数据,并重复附加到相同的输出。这是我的代码:

filenames <- Sys.glob("*.xlsx")
print(filenames)

final.df<-data.table()
for(i in 1:length(filenames)) {
   #... final table named "Stats"

   Stats$file <- i   #To view which file is listed
   df <- data.table(Stats)
   final.df <- rbind(final.df, df)
   drop(df)
}

当我运行代码时,文件名以这种格式打印26次:

[1] "file1.xlsx"          "file2.xlsx"
[1] "file1.xlsx"          "file2.xlsx"
[1] "file1.xlsx"          "file2.xlsx"
...

我当前的输出以这种格式打印:

X        Y        Z       File
1        10       2       file2
2        6        2       file2
1        9        2       file2
1        10       2       file2
2        6        2       file2
1        9        2       file2

我想要的输出如下所示:

X        Y        Z       File
0        4        1       file1
1        7        1       file1
0        1        1       file1
1        10       2       file2
2        6        2       file2
1        9        2       file2

files <- list.files(pattern = "\\.xlsx$")
print(files)

final.df<-list() 

for(title in c(paste(files, sep="."))) {
   #... (Some data named Stats)
   Stats<-data.table(Stats)
   final.df[[title]] <- Stats
   print(final.df)
 }
 Final <- rbindlist(final.df)

1 个答案:

答案 0 :(得分:0)

如果没有您的数据,我认为这应该有效:

listOut <- list()
for(i in 1:length(filenames)) {
  df <- data.table(filenames[i])
  listOut[[i]] <- df
}

dfFinal <- rbindlist(listOut)

我们的想法是创建一个数据框并将其附加到每个文件的列表中。然后,您可以将所有列表元素组合在一起。这比尝试附加到现有数据帧要有效得多。