如何将多份数据保存在一个excel中?

2021-04-09 11:28:04 浏览数 (1)

简介

这是我在数值模拟时,经常存在的问题。

如果输出了非常多的表格(例如,Rmse,Rb,Cp等),我应该怎么把这么多表进行导出?

最傻的方法:一个个导出呗,导到不同的excel表格中。但是问题来了,我要模拟10组参数,每个参数有5个表格,这样做的话会产生50个表格!这多让人头大。

较聪明的方法:使用openxlsx包(或者其他类似包),将每一组参数模拟结果放到一个excel中,其中各个表格依次放到单独的sheet中,这样最后只会生成10个表格啦。

使用教程

导出

write.xlsx() 保存多个 sheet 的数据在一个 excel 中。注意需要下载包 openxlsx

代码语言:javascript复制
#下载包
install.packages("openxlsx")
#加载包
library(openxlsx)
# 整理数据
sheets = list("LEN"=round(len1/mc,3),"COV"=round(cov1/mc,3),
"RB"=round(rb1/mc,3),"RMSE"=round(rmse1/mc,3),
"MUSIG"=round(musig1/mc,3))
# 导出表
write.xlsx(sheets,"mu3n500.xlsx",colNames = TRUE,rowNames = TRUE)

代码讲解: 这里创建了一个列表变量sheets,第一个sheet名叫"LEN",数据为round(len1/mc,3)。以此类推,其他数据表按同样操作进行。最后通过write.xlsx() 将该变量进行保存。

注意:配合使用getwd()setwd(),设定自己想要保存的目录。

结果展示

最后找到该文件,小编这里得到的表格如下所示:包含了6个sheets,每个sheet指某个评价标准或者是参数信息。

结果展示

其他方法

前面的方法是我用的比较多的,为了看问题更加全面我还特地搜了一下,看看有没有其他方法。在stackoverflow[1]中发现还有以下几种方法可供选择。

方法一

可以使用xlsx包存储多个工作表。每个数据框使用不同的sheetName,然后使用参数append=TRUE将两个表放在同一个表格中。

代码语言:javascript复制
library(xlsx)
write.xlsx(dataframe1, file="filename.xlsx", sheetName="sheet1", row.names=FALSE)
write.xlsx(dataframe2, file="filename.xlsx", sheetName="sheet2", append=TRUE, row.names=FALSE)

方法二

另一种方法是:你可以控制格式和数据放置位置,最后保存到sheet中。例如:

代码语言:javascript复制
wb = createWorkbook()
sheet = createSheet(wb, "Sheet 1")

addDataFrame(dataframe1, sheet=sheet, startColumn=1, row.names=FALSE)
addDataFrame(dataframe2, sheet=sheet, startColumn=10, row.names=FALSE)

sheet = createSheet(wb, "Sheet 2")
addDataFrame(dataframe3, sheet=sheet, startColumn=1, row.names=FALSE)
saveWorkbook(wb, "My_File.xlsx")

这种方法可以说更加有效,可以将多个表放到同一个sheet中的任何位置,有兴趣的朋友可以试试。

可探索

在模拟试验的时候如果代码太乱,可以查阅:R问题|代码太乱了,谁帮我整理下?

如果想要人提醒你,数据跑完啦,可以查阅:程序结束后记得提醒我

最后想将结果制作成幻灯片,可以查阅:R沟通|用xaringan包制作幻灯片

R沟通|在Rstudio中运行tex文件 R沟通|舍弃Latex,拥抱Rbeamer吧!

参考资料

[1]

stackoverflow: https://stackoverflow.com/questions/27713310/easy-way-to-export-multiple-data-frame-to-multiple-excel-worksheets

0 人点赞