2012-08-02 77 views
4

我想读取一个大小低于110,000,000行和8列的ido文件。这些列由2个整数列和6个逻辑列组成。文件中使用分隔符"|"。我尝试使用read.big.matrix,它花了很长时间。我也试过dumpDf,它用完了RAM。我试过ff,我听说这是一个很好的软件包,我正在努力解决错误。如果我能以某种方式阅读,我想对此表做一些分析。如果任何人有任何建议,将是伟大的。 亲切的问候, 洛尔肯在r中的大文本文件中读取

+6

看看[this](http://stackoverflow.com/a/1820610/986817)。 – Ryogi 2012-08-02 16:46:42

+1

你能提供一个文件样本(第5-10行)吗? – 2012-08-02 16:57:54

+1

包含ff的代码和错误 – mdsumner 2012-08-02 20:57:56

回答

8

谢谢你的一切建议。我设法弄清楚为什么我不能让错误工作。我会给你所有的答案和建议,所以没有人可以再犯我愚蠢的错误。

首先,给我的数据中包含一些错误,所以我一开始就注定要失败。直到有一位同事在另一个软件中遇到它时,我才意识到这一点。在包含整数的列中有一些字母,这样当read.table.ff包试图读取数据集时,它会以某种方式感到困惑或者我不知道。尽管我得到了另一个数据样本,但有1600万行和8列有正确的条目,并且工作得很完美。我跑的代码如下,历时约30秒,以阅读:

setwd("D:/data test") 
library(ff) 
ffdf1 <- read.table.ffdf(file = "test.ido", header = TRUE, sep = "|") 

谢谢大家的时间,如果你对回答任何问题随时问,我会尽我所能来帮助。

2

你真的需要所有的数据为您的分析?也许你可以聚合你的数据集(比如说从分钟值到日平均值)。这个聚合只需要完成一次,并且希望可以分块完成。通过这种方式,您需要将所有数据一次加载到内存中。

可以使用scan来完成块的读取,重要参数是skipn。或者,将您的数据放入数据库中并以这种方式提取块。你甚至可以使用plyr包中的函数并行运行块,例如我的this blog post