【问题标题】:Use R to write multiple sheets in excel with dynamic sheetNames使用 R 在 excel 中使用动态 sheetNames 编写多张工作表
【发布时间】:2021-03-29 23:47:49
【问题描述】:

这可以使用for 循环轻松完成,但我正在寻找lapplydplyr 的解决方案。

我有多个数据框,我想在单独的表格中导出到 excel 文件(我在类似的行中看到了许多问题和答案,但找不到动态解决命名表格的问题)。

我想用数据框的名称来命名工作表。为简单起见,我以某种模式命名了数据帧(例如 df1 到 df10)。我该怎么做?

下面是一个可重现的示例,我尝试使用两个数据框 mtcarscars(这是有效的,但没有好的工作表名称)。

names_of_dfs=c('mtcars','cars') 
# variable 'combined' below will have all dfs separately stored in it
combined = lapply(as.list(names_of_dfs), get)
names(combined)=names_of_dfs # naming the list but unable to use below

multi.export=function(df,filename){
  return(xlsx::write.xlsx(df,file = filename,
                          sheetName = paste0('sheet',sample(c(1:200),1)),
                          append = T))
}

lapply(combined, function(x) multi.export(x,filename='combined.xlsx'))

如果使用其他 r 包可以更轻松地完成,请提出建议。

【问题讨论】:

    标签: r lapply r-xlsx


    【解决方案1】:

    这是writexl 的一种方法:

    library(writexl)
    write_xlsx(setNames(lapply(names_of_dfs,get),names_of_dfs),
               path = "Test.xlsx")
    

    我们需要使用setNames,因为工作表的名称是从列表名称中设置的。否则,lapply 返回的未命名列表将导致默认工作表名称。

    【讨论】:

    • 谢谢。我不知道setNames(我正在寻找类似的东西)。没有使用你的解决方案,因为我对这个包不太熟悉,我得到了另一个答案。但我相信这也有效,所以再次感谢:)
    • 这种方法更简洁。它只是从 R 中获取一个列表并导出到 Excel 文件。
    【解决方案2】:

    试试这样的:

    library(xlsx)
    #Workbook
    wb = createWorkbook()
    #Lapply
    lapply(names(combined), function(s) {
      sht = createSheet(wb, s)
      addDataFrame(combined[[s]], sht)
    })
    saveWorkbook(wb, "combined.xlsx")
    

    【讨论】:

    • 谢谢!这行得通。在这个答案之后,我意识到我什至不需要创建我所有 dfs 的列表。在addDataFrame 中,我使用了get(s)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 2019-01-05
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多