一般来说,批量读取的数据文件都需要具有相同的列结构(列名、列类型),否则无法批量操作。
重要事情再说两遍:
批量读取的数据文件都需要具有相同的列结构!!
批量读取的数据文件都需要具有相同的列结构!!
files = fs::dir_ls("C:/Data/Excel_Location", recurse = TRUE, glob = "*.xlsx")
files
library(readxl)
library(purrr)
# 增加一列[source列]表明数据来自哪个文件
df = map_dfr(set_names(files), read_xlsx, .id = "source")
head(df)
如果需要批量读取多个Excel文件的第2个sheet,使用sheet参数,具体如下。
# 方式1
map_dfr(set_names(files), read_xlsx, sheet = 2, .id = " 来源")
# 方法2: 改用purrr风格公式形式
map_dfr(set_names(files), ~ read_xlsx(.x, sheet = 1), .id = " 来源")
path = "Datas/Excel_Data.xlsx" # Excel 文件路径
df = map_dfr(set_names(excel_sheets(path)), ~ read_xlsx(path, sheet = .x), .id = "sheet")
head(df)
set_names(files) 是将该字符向量,变成命名字符向量,名字就用元素值;
excel_sheets() 函数: 它的作用在该Excel 文件上,提取各个sheet 名字,得到字符
map_dfr(.x, .f, .id): 将函数.f 依次应用到序列.x 的每个元素返回数据框,再bind_rows 按行合并为一个数据框,.id 可用来增加新列描述来源。【purrr包】
read_xlsx(): 读取xlsx 文件 【readxl 包】
R 语言编程— 基于tidyverse,作者:张敬信,组织:哈尔滨商业大学