在R中基于数据框列表按District生成含多子表的XLSX文件
实现按District拆分生成多工作表Excel文件(R + openxlsx)
完全可以实现这个需求,核心思路是先提取所有唯一的District,再逐个循环生成对应Excel文件,每个文件中分别处理one和two两个工作表的数据(无对应数据时生成空表)。
示例代码
# 加载依赖包 library(openxlsx) # 构造模拟的list_data数据框列表(模拟你的真实数据结构) list_data <- list( one = data.frame( District = c("A", "A", "B"), Value1 = c(10, 20, 30) ), two = data.frame( District = c("B", "C", "C"), Value2 = c(40, 50, 60) ) ) # 提取所有唯一的District(合并两个数据框的District列) all_districts <- unique(c(list_data$one$District, list_data$two$District)) # 循环每个District生成Excel文件 for (dist in all_districts) { # 筛选当前District在one中的数据,无数据则生成空数据框(保留原结构) sheet_one <- if (dist %in% list_data$one$District) { subset(list_data$one, District == dist) } else { # 生成和one结构一致的空数据框 list_data$one[0, ] } # 筛选当前District在two中的数据,无数据则生成空数据框(保留原结构) sheet_two <- if (dist %in% list_data$two$District) { subset(list_data$two, District == dist) } else { list_data$two[0, ] } # 构造要写入的工作表列表 sheets_to_write <- list(one = sheet_one, two = sheet_two) # 写入Excel文件,文件名以District命名 write.xlsx(sheets_to_write, file = paste0(dist, ".xlsx"), rowNames = FALSE) }
预期效果
- 生成
A.xlsx:包含one工作表(有District A的2条数据)和two工作表(空表,保留原数据列名) - 生成
B.xlsx:包含one工作表(District B的1条数据)和two工作表(District B的1条数据) - 生成
C.xlsx:包含one工作表(空表)和two工作表(District C的2条数据)
(注:可直接打开生成的Excel文件查看对应效果,每个文件的两个工作表结构与上述描述一致)
内容的提问来源于stack exchange,提问作者Simon Harmel
相关产品推荐
相关产品推荐

