【问题标题】:How can I merge multiple sheets of an excel workbook in r? [closed]如何在 r 中合并多张 Excel 工作簿? [关闭]
【发布时间】:2017-03-25 19:52:04
【问题描述】:

假设我有一个名为 report.xlsx 的 Excel 文件。该文件有 10 张纸,方便地命名为 Sheet1 到 Sheet10。在每张纸上,第 14 行有列标题:S/N、RegistryNr、Surname、FirstName、(空)、FatherName、MotherName、sex、(空)、DOB。如何将每张工作表合并到一个数据集中?

我知道使用excel_sheets("report.xlsx") 我可以将所有工作表名称放入一个向量中。

我知道使用df <- read_excel("report.xlsx", 1, skip = 14)我可以将一张表的所有数据放入数据框df中。

这就是我对 R 的了解程度:/

如何结合以上命令将每张工作表导入到同一个数据框中?

【问题讨论】:

  • 只需编写一个循环遍历工作表的 for 循环,例如 (for i in 1:14) { df <- rbind(df, read_excel("report.xlsx", i, skip=14)) }
  • @ytk 谢谢!这就是我要找的东西!

标签: r excel dataframe merge google-sheets


【解决方案1】:

我经常使用 purrr 和 readxl 来做这件事:

library(purrr)
library(readxl)

file <- 'path to report.xlsx'

sheets <- excel_sheets(file)

df <- map_df(sheets, ~ read_excel(file, sheet = .x, skip = 14))

【讨论】:

  • 我收到错误Error in eval(substitute(expr), envir, enclos) : corrupt data frame
  • 在标题中包含 NA 可能会导致问题。
  • @JakeKaupp 如果您还想跳过每张纸的最后一行,这将如何工作?我在每张纸上的最后一行是一个总和。
【解决方案2】:
library(data.table)
library(foreach)

xls.files = dir(pattern = "xls")

l = foreach(i = 1:length(xls.files)) %do% {

  f = read_excel(xls.files[i])
  setDT(f)

  f[, label := xls.files[i]]

}

rbindlist(l)

(foreach的优点是可以设置并行后端)。

【讨论】:

    猜你喜欢
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    相关资源
    最近更新 更多