我很惊讶地发现没有简单的方法将多个data.frame导出到excel文件的多个工作表中?我试过xlsx包,看来它只能写一张表(覆盖旧表);我也试过WriteXLS包,但它一直给我错误...
我的代码结构是这样的:按照设计,对于每次迭代,输出数据帧(tempTable)和sheetName(sn)都已更新并导出到一个选项卡中 .
for (i in 2 : ncol(code)){
...
tempTable <- ...
sn <- ...
WriteXLS("tempTable", ExcelFileName = "C:/R_code/../file.xlsx",
SheetNames = sn);
}
我可以导出到几个cvs文件,但在excel中必须有一个简单的方法,对吧?
提前致谢 .
8 回答
您可以使用
xlsx
包写入多个工作表 . 您只需要为每个数据框使用不同的sheetName
,您需要添加append=TRUE
:另一个选项,一个可以让您更好地控制格式和数据框放置位置的选项,是在R / xlsx代码中执行所有操作,然后在最后保存工作簿 . 例如:
如果你发现它有用,这里有一些有趣的辅助函数,可以更容易地使用
xlsx
:http://www.sthda.com/english/wiki/r2excel-read-write-and-format-easily-excel-files-using-r-software向电子表格添加格式,元数据和其他功能 .您还可以使用openxlsx库将多个数据集导出到单个工作簿中的多个工作表.opexxlsx优于xlsx的优点是openxlsx删除了对java库的依赖关系 .
使用列表名称作为工作表名称,将data.frames列表写入单个工作表 .
镇上有一个新的图书馆,来自rOpenSci:writexl
我发现它比上面的建议更好,更快(使用开发版本):
我不熟悉包
WriteXLS
;我一般用XLConnect
:这肯定可以像@joran上面提到的那样进行矢量化,但仅仅为了快速生成动态工作表名称,我使用
for
循环来演示 .我在
loadWorkbook
中使用了create=TRUE
参数,因为我创建了一个新的.xlsx文件,但是如果你的文件已经存在,那么你不必指定它,因为默认值是FALSE
.以下是创建的工作簿的一些屏幕截图:
这里有很多好的答案,但其中一些有点过时了 . 如果您想将更多工作表添加到单个文件中,那么这就是我觉得适合我的方法 . 为清楚起见,这是
openxlsx
版本4.0的工作流程编辑
我've now trialled a few other answers, and I actually really like @Syed' . 它没有利用
openxlsx
的所有功能,但如果你想要一个快速简便的导出方法,那么这可能是最直接的 .Incase数据量很小,R有许多包和功能,可根据您的要求使用 .
write.xlsx, write.xlsx2, XLconnect 也做了工作,但这些有时 slow 与 openxlsx 比较 .
所以,如果你正在处理大型数据集并遇到java错误 . 我建议看看 "openxlsx" 这真是太棒了,把时间减少到了1/12 .
我已经测试了所有,最后我对openxlsx功能的性能印象深刻 .
以下是将多个数据集写入多个工作表的步骤 .
Sys.setenv(“R_ZIPCMD”=“C:/Rtools/bin/zip.exe”)必须是静态的,因为它引用了Rtools中的一些实用程序 .
注意:您的系统上未安装Incase Rtools,请先安装它以获得顺畅的体验 . 这里是供您参考的链接:(选择合适的版本)
https://cran.r-project.org/bin/windows/Rtools/根据下面的链接检查选项(安装时需要选中所有复选框)
https://cloud.githubusercontent.com/assets/7400673/12230758/99fb2202-b8a6-11e5-82e6-836159440831.png
openxlsx 包非常适合从excel文件中读取和写入大量数据,并且在Excel中有很多自定义格式选项 .
有趣的是,我们不必在这里打扰java堆内存 .
对我来说,
WriteXLS
提供了您正在寻找的功能 . 由于您没有指定它返回的错误,我向您展示了一个示例:Example
Explanation
如果
x
是:数据框列表,每个数据框都写入一个工作表
一个字符向量(R对象),每个对象被写入一个工作表
别的东西,然后看看帮助说明:
More on usage
说明:
Solution
举个例子,你会的需要在循环期间收集列表中的所有data.frames,并在循环结束后使用
WriteXLS
.Session info
R 3.2.4
WriteXLS 4.0.0
我是这样使用以下函数为openxlsx做的