从 n 个 Excel 工作表或工作簿汇总数据
楚新元 / 2021-08-23
工作中常常遇到需要从 n 个工作簿(Workbook)中汇总数据,或者从一个工作簿中的 n 个工作表(Worksheet)中汇总数据到一张表中,而每个工作簿或工作表中的数据结构相同。如果 n 超过 3,那么我绝对不会考虑 Ctrl + C、Ctrl + V,一来这种方式会有操作风险,二来重复性的干同一件事一点儿也不优雅,像个机器人。下面给出优雅的实现方式,相信 n 很大的时候你会深刻体会到什么叫优雅。
加载相关 R 包
library(readxl)
library(purrr)
从 n 个工作簿汇总数据
file_list = list.files(
"path/to/",
pattern = "\\.xlsx$", # 这里也可以是 .xls 文件
full.names = TRUE
)
map_dfr(
set_names(file_list),
~ read_excel(., skip = m), # 表头上面往往有标题、单位等要素,需要跳过 m 行
.id = "src"
) -> df
从一个工作簿的 n 个工作表汇总数据
file_path = "path/to/file.xlsx" # 这里也可以是 .xls 文件
map_dfr(
set_names(excel_sheets(file_path)) ,
~ read_excel(file_path, sheet = .x),
.id = "src" # 提取数据后加入一列数据来源
) -> df
从 n 个工作簿的 n 的工作表汇总数据
file_list = list.files(
"path/to/",
pattern = "\\.xlsx$", # 这里也可以是 .xls 文件
full.names = TRUE
)
read_path = function(path) {
map_dfr(
excel_sheets(path),
~ read_excel(path, sheet = .x, skip = m)
)
}
df = map_dfr(file_list, read_path)
文章参考了张敬信老师的知乎博文,在此向张老师表示感谢。