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文件")

}


评论

此博客中的热门博文

V2ray websocket(ws)+tls+nginx分流

Rstudio 使用代理