Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将大型(390万obs)数据帧导出到文本文件的最有效方法?_R_Export_Export To Csv - Fatal编程技术网

R 将大型(390万obs)数据帧导出到文本文件的最有效方法?

R 将大型(390万obs)数据帧导出到文本文件的最有效方法?,r,export,export-to-csv,R,Export,Export To Csv,我有一个相当大的R数据框,我想导出到SPSS。 这个文件一开始就让我头疼了好几个小时,试图将它导入R,但是我成功地使用了read.fwf()选项comment.char=“%”(文件中没有出现字符)和fill=TRUE(这是一个固定宽度的ASCII文件,有些行缺少所有变量,导致错误消息) 无论如何,我的数据帧目前由3,9个mill观测值和48个变量(全部为字符)组成。我可以通过使用df2将其拆分为4 x 1个mill obs集来相当快地将其写入文件,尽管我只使用它读取非常大的文件(10+Gb)我

我有一个相当大的R数据框,我想导出到SPSS。 这个文件一开始就让我头疼了好几个小时,试图将它导入R,但是我成功地使用了
read.fwf()
选项
comment.char=“%”(文件中没有出现字符)和
fill=TRUE
(这是一个固定宽度的ASCII文件,有些行缺少所有变量,导致错误消息)


无论如何,我的数据帧目前由3,9个mill观测值和48个变量(全部为字符)组成。我可以通过使用
df2将其拆分为4 x 1个mill obs集来相当快地将其写入文件,尽管我只使用它读取非常大的文件(10+Gb)我相信
ff
软件包具有编写超大dfs的功能。

据猜测,您的机器内存不足,因此R必须使用交换文件,这会减慢速度。如果您是为代码付费,那么购买更多的RAM可能比编写新代码更便宜


也就是说,有一些可能性。您可以将文件导出到数据库,然后使用该数据库的功能写入文本文件。JD Long的回答告诉您如何以这种方式读入文件;反转过程应该不会太困难。或者使用
bigmemory
ff
软件包(如Davy所述)可用于编写此类文件。

好吧,对于真正大的文件和R,答案通常是,最好将此类工作转移到数据库。SPSS具有ODBC连接,而
RODBC
提供了从R到SQL的接口

我注意到,在签出我的信息的过程中,我被抓到了。

1)如果您的文件都是字符串,那么使用
write.table()
保存时,如果您首先将其更改为
矩阵
,则保存速度会快得多

2) 也可以将它分块写出来,比如1000000行,但总是写在同一个文件中,并使用参数
append=TRUE

Update 在Matt Dowle进行了大量并行化工作并添加了其他效率改进之后,
fread
现在比
write.csv
快15倍。有关更多信息,请参阅链接答案


现在,
data.table
有一个由Otto Seiskari提供的
fwrite
函数,它的速度一般是
write.csv
的两倍。有关一些基准,请参见

library(data.table) 
fwrite(DF, "output.csv")

请注意,行名称被排除在外,因为
data.table
类型不使用它们。

Hi Richie,即使使用此数据集,我也不确定8GB RAM是否符合“内存不足”的条件。然而,我将研究如何使用JD建议的
sqldf()
,因为我在分析中经常使用它。谢谢你的指点!我试着用
ff()
碰碰运气,但对使用的语法感到困惑。我无法完全理解它,在原始数据集的子集上尝试它并没有给我时间上的收获。不管怎样,谢谢。真是聪明的解决办法。对于变量类型不同的data.frames不起作用,但这绝对是一个很好的解决方案!呵呵,我必须对几乎相同维度的数据做同样的事情:你不会碰巧在处理我们的出生或死亡微数据,是吗?@tim riffe:不是,但有点像,这些是奶牛出生和产犊数据:)