用于R中大数据表的write.csv
我有一个data.table
不是很大(2 GB),但由于某种原因write.csv
需要很长时间才能写出来(我从来没有真正完成等待),似乎使用大量的RAM来做它。 我试图将data.table
转换为data.table
,尽pipe这不应该做任何事情,因为data.table
扩展data.frame
。 有没有人遇到过这个? 更重要的是,如果你用Ctrl – C来停止它,R似乎没有给回内存。
更新08.04.2016 :
最近已经将fwrite
添加到data.table包的开发版本中。 它也同时运行(隐式)。
# Install development version of data.table install.packages("data.table", repos = "https://Rdatatable.github.io/data.table", type = "source") # Load package library(data.table) # Load data data(USArrests) # Write CSV fwrite(USArrests, "USArrests_fwrite.csv")
根据加速write.table性能的详细基准testing, fwrite
速度比write.csv
快了17倍(YMMV)。
更新15.12.2015 :
将来在data.table
包中可能会有一个fwrite
函数,请参阅: https : //github.com/Rdatatable/data.table/issues/580 。 在这个线程中,一个GIST被链接,它为这个函数提供了一个原型,加快了这个过程2倍(根据作者, https ://gist.github.com/oseiskar/15c4a3fd9b6ec5856c89)。
原文答案 :
我有同样的问题(试图写更大的CSV文件),并最终决定使用CSV文件。
我build议你使用SQLite,因为它比处理CSV文件要快得多:
require("RSQLite") # Set up database drv <- dbDriver("SQLite") con <- dbConnect(drv, dbname = "test.db") # Load example data data(USArrests) # Write data "USArrests" in table "USArrests" in database "test.db" dbWriteTable(con, "arrests", USArrests) # Test if the data was correctly stored in the database, ie # run an exemplary query on the newly created database dbGetQuery(con, "SELECT * FROM arrests WHERE Murder > 10") # row_names Murder Assault UrbanPop Rape # 1 Alabama 13.2 236 58 21.2 # 2 Florida 15.4 335 80 31.9 # 3 Georgia 17.4 211 60 25.8 # 4 Illinois 10.4 249 83 24.0 # 5 Louisiana 15.4 249 66 22.2 # 6 Maryland 11.3 300 67 27.8 # 7 Michigan 12.1 255 74 35.1 # 8 Mississippi 16.1 259 44 17.1 # 9 Nevada 12.2 252 81 46.0 # 10 New Mexico 11.4 285 70 32.1 # 11 New York 11.1 254 86 26.1 # 12 North Carolina 13.0 337 45 16.1 # 13 South Carolina 14.4 279 48 22.5 # 14 Tennessee 13.2 188 59 26.9 # 15 Texas 12.7 201 80 25.5 # Close the connection to the database dbDisconnect(con)
有关更多信息,请参阅web/packages/RSQLite/RSQLite.pdf
您也可以使用像http://sqliteadmin.orbmu2k.de/这样的软件访问数据库并将数据库导出到CSV等。;
–