使用 R 在 excel 中使用动态 sheetNames 写入多个工作表
Use R to write multiple sheets in excel with dynamic sheetNames
这可以使用 for
循环轻松完成,但我正在寻找 lapply
或 dplyr
.
的解决方案
我有多个数据框,我想将它们导出到单独的 sheet 文件中的 excel 文件(我在类似的行中看到了很多问题和答案,但找不到解决命名问题的问题和答案 sheets 动态)。
我想用数据框的名称命名 sheet。为简单起见,我以一种模式命名了数据帧(比如 df1 到 df10)。我该怎么做?
下面是一个可重现的示例,我尝试使用两个数据帧 mtcars
和 cars
(这是有效的,但没有好的 sheetnames)。
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 包可以更轻松地完成,请提出建议。
尝试这样的事情:
library(xlsx)
#Workbook
wb = createWorkbook()
#Lapply
lapply(names(combined), function(s) {
sht = createSheet(wb, s)
addDataFrame(combined[[s]], sht)
})
saveWorkbook(wb, "combined.xlsx")
这是 writexl
的方法:
library(writexl)
write_xlsx(setNames(lapply(names_of_dfs,get),names_of_dfs),
path = "Test.xlsx")
我们需要使用 setNames
因为 sheet 的名称是从列表名称中设置的。否则,lapply
returns 的未命名列表将导致默认 sheet 名称。
这可以使用 for
循环轻松完成,但我正在寻找 lapply
或 dplyr
.
我有多个数据框,我想将它们导出到单独的 sheet 文件中的 excel 文件(我在类似的行中看到了很多问题和答案,但找不到解决命名问题的问题和答案 sheets 动态)。
我想用数据框的名称命名 sheet。为简单起见,我以一种模式命名了数据帧(比如 df1 到 df10)。我该怎么做?
下面是一个可重现的示例,我尝试使用两个数据帧 mtcars
和 cars
(这是有效的,但没有好的 sheetnames)。
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 包可以更轻松地完成,请提出建议。
尝试这样的事情:
library(xlsx)
#Workbook
wb = createWorkbook()
#Lapply
lapply(names(combined), function(s) {
sht = createSheet(wb, s)
addDataFrame(combined[[s]], sht)
})
saveWorkbook(wb, "combined.xlsx")
这是 writexl
的方法:
library(writexl)
write_xlsx(setNames(lapply(names_of_dfs,get),names_of_dfs),
path = "Test.xlsx")
我们需要使用 setNames
因为 sheet 的名称是从列表名称中设置的。否则,lapply
returns 的未命名列表将导致默认 sheet 名称。