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

使用rio包将多个Excel工作表导入单个DataFrame,将标识列值替换为工作表名称

解决方法:将rio导入的file列替换为工作表名称

这问题很好解决,你只需要先获取Excel文件里的所有工作表名称,然后替换掉默认生成的file列里的数字就行,或者换一种更直接的导入方式,直接把工作表名称作为列值添加进去。给你两种方案:

方案一:快速修改现有导入结果

这种方法在你原有代码的基础上做最小改动:

  1. 先获取目标Excel文件的所有工作表名称:
library(rio)
# 获取所有工作表名称
sheet_names <- excel_sheets("EA 2016/Emission-relevant Energy Accounts_total.xlsx")
  1. 执行你原来的导入代码:
WIOD_EA_EmRelEnergy <- import_list("EA 2016/Emission-relevant Energy Accounts_total.xlsx", setclass = "tbl", rbind = TRUE)
  1. 把file列的数字索引替换为对应的工作表名称:
# 如果用tidyverse的写法
library(dplyr)
WIOD_EA_EmRelEnergy <- WIOD_EA_EmRelEnergy %>%
  mutate(file = sheet_names[file])

# 不用tidyverse的基础R写法
WIOD_EA_EmRelEnergy$file <- sheet_names[WIOD_EA_EmRelEnergy$file]

这样file列的值就会变成对应的国家代码(比如"AUS"、"AUT"),而不是原来的数字序号了。

方案二:导入时直接添加工作表名称(更灵活)

如果你想自定义列名(比如不想用file这个列名),或者需要对每个工作表做额外预处理,推荐这种方法:

library(rio)
library(tidyverse)

# 获取工作表名称
sheet_names <- excel_sheets("EA 2016/Emission-relevant Energy Accounts_total.xlsx")

# 循环读取每个工作表,添加自定义列名的工作表名称,再合并
WIOD_EA_EmRelEnergy <- map2(sheet_names, sheet_names, function(sheet_id, sheet_name) {
  # 读取单个工作表
  import("EA 2016/Emission-relevant Energy Accounts_total.xlsx", sheet = sheet_id, setclass = "tbl") %>%
    # 添加工作表名称列,这里可以自定义列名,比如叫country_code
    mutate(country_code = sheet_name)
}) %>%
  # 合并所有表
  bind_rows()

这种方法的好处是你可以自由控制列名,而且如果后续需要对不同国家的数据做单独处理,也能在循环里直接添加逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:47:31