【问题标题】:For-Loop read and save multiple .xlsx files to one fileFor-Loop 读取多个 .xlsx 文件并将其保存到一个文件中
【发布时间】:2018-04-26 15:22:47
【问题描述】:

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

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)

【问题讨论】:

标签: r rbind


【解决方案1】:

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

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

dfFinal <- rbindlist(listOut)

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

【讨论】:

  • 这个答案是有道理的,但我的输出仍然是我文件夹中的最后一个文件并附加一个重复的结果。
  • 是的,如果没有看到数据,我很难想象这一点。我在上面做了一个编辑。如果这不起作用,您可以在某处共享文件吗?
  • 我不得不对循环线做一些不同的事情,否则这是一个很好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 2018-07-26
  • 2019-01-18
  • 1970-01-01
相关资源
最近更新 更多