0

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

我有多个数据框,我想在单独的表格中导出到 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 包更轻松地完成它,请建议。

4

2 回答 2

2

这是一种方法writexl

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

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

于 2020-12-19T16:45:44.217 回答
1

尝试这样的事情:

library(xlsx)
#Workbook
wb = createWorkbook()
#Lapply
lapply(names(combined), function(s) {
  sht = createSheet(wb, s)
  addDataFrame(combined[[s]], sht)
})
saveWorkbook(wb, "combined.xlsx")
于 2020-12-19T16:45:06.203 回答