【问题标题】:Append multiple sheets from multiple Excel files in R在R中附加来自多个Excel文件的多个工作表
【发布时间】:2021-11-22 19:22:52
【问题描述】:

我正在尝试从多个 Excel 文件中附加多个工作表。例如,每个 Excel 文件有 10 个工作表(格式不同),但一个 Excel 文件的 10 个工作表与另一个 Excel 文件的关联的 10 个工作表具有相同的名称和格式。本质上,每个 Excel 文件包含不同国家的不同类型信息,但每个国家收集的信息类型相同(人口、污染指数、GDP 等)。而且我有很多国家,所以我正在考虑使用循环。

我使用“report_1h”作为主 Excel 文件,并将其他 Excel 文件的工作表附加到主文件的工作表中。

library(rio)

x1_data <- import_list("report_1h.xlsx")

report_list <- list.files(path = 'E:/Report_folder', pattern = '*.xlsx')

sheet_ <- data.frame()

for (file in report_list){
  book <- import_list(file)
  for (i in 1:31){
  sheet_[i] <- rbind(x1_data[[i]][,],book[[i]][,])
  x1_data[[i]][,] <- sheet_[i]
  }
}

该循环旨在将每个 Excel 文件中的工作表附加到主文件“report_1h”的工作表中。但它给出了错误:

Error in `[<-.data.frame`(`*tmp*`, i, value = c("Data Source(s):", "Data Source(s):",  : 
  replacement has 2 rows, data has 0

谁能告诉我为什么?

【问题讨论】:

  • 对不起,每个 Excel 文件有 31 张,不是 10 张。
  • 所以如果你有 10 个 excel 文件,每个文件有 31 张。您是否要将所有 sheet1 中的 10 个文件合并到一个数据框中,然后将 sheet2 中的 10 个文件合并到另一个数据框中,同样您最终将拥有 31 个数据框?
  • 是的,我想将所有 10 个 excel 文件的所有 sheet1 和所有 10 个 excel 文件的所有 sheet2 组合在一起。所以最后我有 31 个数据框!

标签: r excel append


【解决方案1】:

这是一种方法-

library(tidyverse)

#get the all the filenames
report_list <- list.files(path = 'E:/Report_folder', pattern = '*.xlsx$')

#Create a list of dataframes
map(report_list, function(x) {
  sheets <-excel_sheets(x)
  map(sheets, function(y) read_excel(x, y))
}) %>% transpose() %>%
  map(bind_rows) -> result

#assign sheet names
names(result) <- paste0('Sheet', seq_along(result))

#Write master excel file
writexl::write_xlsx(result, 'master_excel.xlsx')

【讨论】:

  • 谢谢,我马上试试!
猜你喜欢
  • 2021-06-23
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 2021-11-21
  • 1970-01-01
  • 2018-07-09
相关资源
最近更新 更多