R 读取文件夹下的所有excel文件
library(readxl)
library(purrr)
library(dplyr)
# 设置文件夹路径
folder_path <- "/mnt/c/Users/xuefl/Downloads/新冠存疑分市州"
# 获取文件夹中所有的xlsx文件
xlsx_files <- list.files(path = folder_path, pattern = "\\.xlsx$", full.names = TRUE)
# 如果没有找到任何xlsx文件,输出警告
if (length(xlsx_files) == 0) {
warning("未在指定文件夹找到任何xlsx文件")
}
# 创建一个函数来读取Excel文件,并添加文件名作为标识
read_excel_with_source <- function(file_path) {
file_name <- basename(file_path)
df <- try(read_excel(file_path), silent = TRUE)
if (inherits(df, "try-error")) {
warning(paste("无法读取文件:", file_name))
return(NULL)
}
# 添加文件名作为源标识
df$source_file <- file_name
return(df)
}
# 使用map函数批量读取所有xlsx文件
all_data_list <- map(xlsx_files, read_excel_with_source)
# 移除读取失败的NULL元素
all_data_list <- all_data_list[!sapply(all_data_list, is.null)]
# 检查是否所有数据框的列数相同
col_counts <- sapply(all_data_list, ncol)
if (length(unique(col_counts)) > 1) {
warning("不同文件的列数不一致,可能导致合并问题")
}
# 尝试绑定所有数据框
if (length(all_data_list) > 0) {
all_data <- try(bind_rows(all_data_list), silent = TRUE)
if (inherits(all_data, "try-error")) {
warning("无法合并所有数据,可能是因为列结构不一致")
# 为后续处理保存单独的数据框列表
list_of_dataframes <- all_data_list
cat("已将所有数据保存在'list_of_dataframes'变量中,包含", length(list_of_dataframes), "个数据框\n")
} else {
# 打印合并后数据框的摘要信息
cat("已成功读取并合并", length(all_data_list), "个Excel文件\n")
cat("合并后的数据框包含", nrow(all_data), "行和", ncol(all_data), "列\n")
# 返回合并后的数据框
all_data
}
} else {
warning("没有成功读取任何Excel文件")
}
评论
发表评论