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

For-Loop read and save multiple .xlsx files to one file

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

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)

没有你的数据,我认为这应该可行:

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

dfFinal <- rbindlist(listOut)

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