首页 > 解决方案 > 导出包含多个工作表的多个 Excel 文件中的数据框列表

问题描述

如果已经在其他地方问过这个问题,请提前道歉,但我尝试了不同的尝试,但到目前为止没有任何效果。

我有一个Results包含 26 个数据帧 (DF) 的列表(名为 )。我使用匿名函数将每个 DF 导出到 26 个 Excel 文件中writexllapply

>   head(Results)
$Paris.Aquatic_moss
    Sample_type Locality Chemicals mean_Mesure max_Mesure min_Mesure 
1  Aquatic_moss   Paris   AG-110m        NA         NA         NA   
2  Aquatic_moss   Paris     BE-7      123.275      177.0      52.60  
3  Aquatic_moss   Paris      NH3         NA         NA         NA   
4  Aquatic_moss   Paris      CO         ...        ...        ...  
5  Aquatic_moss   London  AG-110m        NA         NA         NA   
6  Aquatic_moss   London     BE-7       ...        ...        ...  
7  Aquatic_moss   London     NH3        ...        ...        ...   
8  Aquatic_moss   London     CO         ...        ...        ... 

library(writexl)
lapply(names(Results), 
       function (x) write_xlsx(Results[[x]], path=paste(x, "2019.xlsx", sep="_"))) 

我获得了 26 个名为“nameoftheDF1_2019”、“nameoftheDF2_2019”的 Excel 文件……每个 Excel 都有一个名为“Sheet1”的工作表。但是每个 Excel 都是巨大的。我意识到每个 DF 本身都由名为“Locality”的列拆分并生成 26 个 Excel 文件,每个文件都有不同的工作表,这会容易得多。

Results在导出到 Excel 之前,我可以拆分 26 个 DF 的列表(见下文)。但在这种情况下,我不知道如何在导出过程中重新组合,以便我保留 26 个 Excel 文件,每个文件包含几张

Results_Locality <- split(Results,list(Results$Locality), drop=TRUE)

所以我想知道是否可以添加lapply 另一个函数以Results按“本地化”列拆分,以便将每个 DF 导出到具有不同工作表的 Excel 文件中(sheet1 = DF1 中的 Localization1,sheet2 = DF1 中的 Localization 2,. ..) ? 否则是否可以创建一个循环来导出同一张表中每个 DF 中每个本地化的数据?

标签: rexcellapply

解决方案


这可以通过拆分 df 并将拆分后的 df 传递给writexl::write_xlsx. 默认情况下write_xlsx会将列表的元素放在不同的工作表中:

library(writexl)

xlexport <- function(x, var = "Locality") {
  d <- split(Results[[x]], Results[[x]][[var]])
  writexl::write_xlsx(d, path = paste(x, "2019.xlsx", sep = "_"))
}

Results <- list(iris1 = iris, iris2 = iris)

lapply(names(Results), xlexport, var = "Species")

推荐阅读