楚新元 | All in R

Welcome to R Square

从 n 个 Excel 工作表或工作簿汇总数据

楚新元 / 2021-08-23


工作中常常遇到需要从 n 个工作簿(Workbook)中汇总数据,或者从一个工作簿中的 n 个工作表(Worksheet)中汇总数据到一张表中,而每个工作簿或工作表中的数据结构相同。如果 n 超过 3,那么我绝对不会考虑 Ctrl + CCtrl + V,一来这种方式会有操作风险,二来重复性的干同一件事一点儿也不优雅,像个机器人。下面给出优雅的实现方式,相信 n 很大的时候你会深刻体会到什么叫优雅。

加载相关 R 包

library(readxl)
library(purrr)

从 n 个工作簿汇总数据

files_path = list.files(
  "path/to/", 
  pattern = "\\.xlsx$",  # 这里也可以是 filename.xls 文件
  full.names = TRUE
)  
names(files_path) = files_path # 给每个对象赋值一个名字
df = map_dfr(
  files_path,  
  ~ read_excel(., skip = <m>),  # 表头上面往往有标题、单位等要素,需要跳过 m 行
  .id = "source"  # 提取数据后加入一列数据来源
)

从一个工作簿的 n 个工作表汇总数据

file_path = "path/to/file.xlsx"  # 这里也可以是 filename.xls 文件
sheet_names = excel_sheets(file_path)
names(sheet_names) = sheet_names  # 给每个对象赋值一个名字
df = map_dfr(
  sheet_names,
  ~ read_excel(file_path, sheet = .),
  .id = "source"  # 提取数据后加入一列数据来源
)