You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用tidyverse批量处理多Excel工作表:导入、转置、合并?

Tidyverse 批量处理Excel多工作表并合并解决方案

核心思路

利用purrr::map_df()遍历Excel的所有工作表,在遍历流程中嵌入单表清洗操作(删行、转置、创建时间变量),同时添加工作表名作为id变量,最终自动合并为统一数据框。

完整代码示例

# 加载所需工具包
library(tidyverse)
library(readxl)

# 替换为你的Excel文件实际路径
excel_path <- "your_target_file.xlsx"

# 获取文件内所有工作表名称
sheet_names <- excel_sheets(excel_path)

# 批量处理并合并所有工作表
final_combined_df <- map_df(sheet_names, function(current_sheet) {
  # 1. 读取当前工作表数据
  raw_data <- read_excel(excel_path, sheet = current_sheet)
  
  # 2. 删除指定行(示例:删除前2行,按需修改行号范围)
  cleaned_data <- raw_data %>% slice(-c(1,2))
  
  # 3. 转置数据并整理列名
  transposed_data <- cleaned_data %>%
    t() %>%
    as_tibble(rownames = "indicator") %>%
    # 用转置后的第一行值作为新列名
    rename_with(~ .[1, .x], .cols = -indicator) %>%
    # 移除原表头行(转置后的第一行)
    slice(-1)
  
  # 4. 创建时间变量(假设原数据中"时间"是单独一列,转置后对应indicator为"时间"的行)
  time_value <- transposed_data %>%
    filter(indicator == "时间") %>%
    pull(current_sheet)
  
  # 5. 整理单表:添加时间变量、保留有效指标、插入工作表id
  processed_data <- transposed_data %>%
    filter(indicator != "时间") %>%
    mutate(
      时间 = time_value,
      id = current_sheet
    )
  
  return(processed_data)
})

关键参数调整说明

  • 删除指定行:修改slice(-c(1,2))中的行号,比如-3删除第三行,-c(1:4)删除前4行,匹配你的数据清洗需求。
  • 转置后列名适配:如果原数据表头结构特殊,可调整rename_with()和slice(-1)的逻辑,确保转置后的列名准确对应业务含义。
  • 时间变量提取:示例基于"原数据有单独的'时间'列"的假设,若你的时间存储逻辑不同,可修改filter(indicator == "时间")的条件,匹配实际的时间标识。

内容的提问来源于stack exchange,提问作者Pete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 13:45:21