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

如何在R中将DataFrame子集写入同一Excel的不同工作表?

实现将拆分数据写入同一Excel的不同工作表

当然可以轻松实现这个需求!你之前的代码是把每个子集单独存成Excel文件,现在只需要调整逻辑,先创建一个单一工作簿对象,再把每个Name对应的数据分别写入这个工作簿的不同工作表,最后一次性保存即可。推荐使用openxlsx包来完成,它处理多工作表更高效,而且不需要依赖Java环境。

修改后的完整代码

library("openxlsx")

# 读取原始数据
All_DATA <- read.xlsx("D:/test.xlsx")

# 创建一个空的Excel工作簿对象
wb <- createWorkbook()

# 循环遍历每个唯一的Name值
for(i in unique(All_DATA$Name)){
  # 筛选对应Name的数据子集(修正了原代码里列名大小写的小错误)
  data_subset <- subset(All_DATA, Name == i)
  # 为当前Name添加一个工作表,工作表名直接用Name的值
  addWorksheet(wb, sheetName = i)
  # 将子集数据写入对应的工作表,不保留行名
  writeData(wb, sheet = i, x = data_subset, rowNames = FALSE)
}

# 保存整个工作簿到指定路径,允许覆盖已存在的文件
saveWorkbook(wb, file = "D:/Admin/All_DATA_Split.xlsx", overwrite = TRUE)

关键逻辑说明

  • createWorkbook():创建一个空白的Excel工作簿容器,后续所有拆分后的工作表都将挂载到这个对象上。
  • addWorksheet(wb, sheetName = i):以每个Name的取值作为工作表名称,在工作簿中新建对应的工作表。
  • writeData():把筛选好的子集数据写入对应工作表,rowNames = FALSE避免把R中的行索引写入Excel表格。
  • saveWorkbook():最后一次性把整个包含多工作表的工作簿保存到目标路径,overwrite = TRUE参数可以覆盖已存在的同名文件(按需调整)。

额外提示

  • 如果一定要用xlsx包实现,逻辑类似但需要依赖Java环境:先创建Workbook对象,用createSheet()添加工作表,再用write.xlsx()指定工作表写入,最后保存。但openxlsx在兼容性和效率上表现更好,更推荐使用。
  • 注意如果Name的取值包含Excel不允许的特殊字符(比如斜杠、冒号、星号),需要提前做清洗处理,否则无法创建对应名称的工作表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:56:59