工作中常常遇到需要从n个工作簿(Workbook)中提取数据,或者从一个工作簿中的n个工作表(Worksheet)中提取数据到一张表中,而每个工作簿或工作表中的数据结构相同。如果n超过3,那么我绝对不会考虑 Ctrl + C、Ctrl + V,一来这种方式会有操作风险,二来重复性的干同一件事一点儿也不优雅,像个机器人。下面给出优雅的实现方式,相信n很大的时候你会深刻体会到什么叫优雅。
加载相关R包
1
2
3
|
# 加载相关R包
library(readxl)
library(tidyverse)
|
从一个工作簿的n个工作表提取数据
1
2
3
4
5
6
7
8
|
file_path = "path/to/file.xlsx" # 这里也可以是file.xls文件
sheet_names = excel_sheets(file_path)
names(sheet_names) = sheet_names # 给每个对象赋值一个名字
df = map_dfr(
sheet_names,
~read_excel(file_path, sheet = .),
.id = "source" # 提取数据后加入一列数据来源
)
|
从n个工作簿中提取数据
1
2
3
4
5
6
7
8
9
10
|
files_path = list.files(
"path/to/",
pattern = "\\.xlsx$", # 这里也可以是.xls文件
full.names = TRUE)
names(files_path) = files_path # 给每个对象赋值一个名字
df = map_dfr(
files_path,
~read_excel(., skip = <m>), # 表头上面往往有标题、单位等要素,需要跳过m行
.id = "source" # 提取数据后加入一列数据来源
)
|