[英]Efficient way of exporting large R dataset to excel
作为标题,我有一个大约13000行和255列的数据集(实际上我有255列以上,但是RODBC
软件包似乎将导出的列数限制为255,因此我对其进行了一些调整),需要将其导出到xls / xlsx文件。
我尝试了RODBC
和xlsx
软件包,这两个软件包都需要5分钟以上的时间才能导出。 我想知道是否还有其他更有效的方法?
我知道一点点python(使用python连接到Outlook,以便在邮箱中列出电子邮件),如果有使用python进行导出的方法,也很受欢迎。
建议使用csv的情况很少,在我的情况下可能不太可能,因为有一个包含自由文本的字段,我无法控制在该字段中输入哪种字符,从而很难选择分隔符。
谢谢您的建议,但我发现R包仅在数据帧相对较小时才是好选择,而对于所有列都是字符的数据帧来说,它甚至很慢。 有什么建议么?
有很多选择:
xlsx
与多张工作表一起使用(您已经尝试过,但它太慢了,我知道) write.csv
应该更快,并且可以被Excel读取 odbcConnectExcel2007
内RODBC
bigmemory
软件包可帮助您管理大型数据bigmemory
,尤其是如果您可以将其制成稀疏矩阵时 XLConnect
为这个有同样问题的人工作 RODBC
或RPostgreSQL
等将其写入SQL RPostgreSQL
,然后在Excel中建立与数据库的连接。 我经常这样做。 这是相关资源 。 Pandas
tab-delimited
文本文件,然后将其导入到Excel: write.table (table,sep="\\t",quote=FALSE,row.names=FALSE,file=file.name)
fread
RExcel
XLLoop
最后,这是一篇不错的小文章 “连接R和Excel的百万种方法”,您可能会发现它很有用,尽管我认为我实际上给了您比文章更多的选择。
我将从最简单的解决方案开始,例如fread
,然后如果仍然没有获得想要的结果的话,就fread
相对复杂的解决方案前进。
根据项目的确切性质,您甚至可能会受益于并行性或多核处理。 在大多数情况下,这些操作不会提高您的I / O速度,但是它可以加速在过程中发生的数据的任何处理/转换,从而使整个数据管道更快。
Python
也有很好的设备来处理这个问题,但是R
内有很多解决方案,希望您不必为了写数据而只用切换语言。 不过,您可以尝试
XlsxWriter
,或 优化的openpyxl
软件包的读写器
如果您想尝试基于Python的解决方案。
尝试使用openxlsx包的速度相当快。
https://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf
write.xlsx()
或writeData()
命令写入xlsx文件 来自openxlsx文档的使用openxlsx库的基本操作的小示例
`## setup a workbook with 3 worksheets
wb <- createWorkbook()
addWorksheet(wb = wb, sheetName = "Sheet 1", gridLines = FALSE)
writeDataTable(wb = wb, sheet = 1, x = iris)
addWorksheet(wb = wb, sheetName = "mtcars (Sheet 2)", gridLines = FALSE)
writeData(wb = wb, sheet = 2, x = mtcars)
addWorksheet(wb = wb, sheetName = "Sheet 3", gridLines = FALSE)
writeData(wb = wb, sheet = 3, x = Formaldehyde)
worksheetOrder(wb)
names(wb)
worksheetOrder(wb) <- c(1,3,2) # switch position of sheets 2 & 3
writeData(wb, 2, 'This is still the "mtcars" worksheet', startCol = 15)
worksheetOrder(wb)
names(wb) ## ordering within workbook is not changed
saveWorkbook(wb, "worksheetOrderExample.xlsx", overwrite = TRUE)
worksheetOrder(wb) <- c(3,2,1)
saveWorkbook(wb, "worksheetOrderExample2.xlsx", overwrite = TRUE)`
加尼
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.