【问题标题】:Export a list of data frames in multiple Excel files containing each multiple sheets导出包含多个工作表的多个 Excel 文件中的数据框列表
【发布时间】:2020-10-15 20:13:07
【问题描述】:

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

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

>   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 文件,每个文件都有不同的工作表。

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

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

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

【问题讨论】:

  • 看看data.table::split().. 它可以按列值拆分数据表,并输出到可以循环使用的列表。
  • 我不太明白。 R 给我一个错误:Error: 'split' is not an exported object from 'namespace:data.table'
  • 对不起... data.table 带有它自己的拆分方法,但它不是一个单独的函数,您可以在 data.table... split.data 上调用“split”。然后将调用 table。

标签: r excel lapply


【解决方案1】:

这可以通过拆分 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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2016-02-28
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多