2012-05-13 51 views
2

我使用的ffffbase包兩個ffdf對象結合起來,但是當我使用merge聲明它會從100萬線的目標ffdf 800萬線。[R FF/ffbase合併創建行

ffdf1爲1萬行6列:

> summary(ffdf2) 
       Length Class  Mode 
userid  1000000 ff_vector list 
V2   1000000 ff_vector list 
V3   1000000 ff_vector list 
V4   1000000 ff_vector list 
V5   1000000 ff_vector list 
V6   1000000 ff_vector list 

ffdf2是約20萬行X 3列是這樣的:

userid  gender  age 
    1   1   3 
    2   1   2 
    3   2   5 
    4   0   4 
    5   2   3 
    ...  ...  ... 

我用下面的代碼來合併這兩個:

ffdf3 <- merge(ffdf1, ffdf2, by.x="userid",by.y="userid",all.x=T,sort=F) 

結果是這樣的:

> summary(ffdf3) 
        Length Class  Mode 
    userid  8000000 ff_vector list 
    V2   8000000 ff_vector list 
    V3   8000000 ff_vector list 
    V4   8000000 ff_vector list 
    V5   8000000 ff_vector list 
    V6   8000000 ff_vector list 
    gender  8000000 ff_vector list 
    age   8000000 ff_vector list 

任何想法爲什麼長度從1mm到8mm?

編輯:

當我試試這個:

ffdf3 <- merge(ffdf1, ffdf2, by.x="userid",by.y="userid",all.x=F,sort=F) 

我得到:

> summary(ffdf3) 
         Length Class  Mode 
     userid  740383 ff_vector list 
     V2   740383 ff_vector list 
     V3   740383 ff_vector list 
     V4   740383 ff_vector list 
     V5   740383 ff_vector list 
     V6   740383 ff_vector list 
     gender  740383 ff_vector list 
     age   740383 ff_vector list 

而且,這裏是從運行合併輸出:

2012-05-13 14:49:06, x has 2 chunks, y has 8 chunks 
2012-05-13 14:49:06, working on x chunk 1:500000 
2012-05-13 14:49:07, working on y chunk 1:2958661 
2012-05-13 14:49:16, working on y chunk 2958662:5917322 
2012-05-13 14:49:32, working on y chunk 5917323:8875983 
2012-05-13 14:49:45, working on y chunk 8875984:11834644 
2012-05-13 14:49:57, working on y chunk 11834645:14793305 
2012-05-13 14:50:09, working on y chunk 14793306:17751966 
2012-05-13 14:50:20, working on y chunk 17751967:20710627 
2012-05-13 14:50:30, working on y chunk 20710628:23669283 
2012-05-13 14:50:40, working on x chunk 500001:1000000 
2012-05-13 14:50:41, working on y chunk 1:2958661 
2012-05-13 14:50:52, working on y chunk 2958662:5917322 
2012-05-13 14:51:03, working on y chunk 5917323:8875983 
2012-05-13 14:51:14, working on y chunk 8875984:11834644 
2012-05-13 14:51:24, working on y chunk 11834645:14793305 
2012-05-13 14:51:36, working on y chunk 14793306:17751966 
2012-05-13 14:51:47, working on y chunk 17751967:20710627 
2012-05-13 14:51:58, working on y chunk 20710628:23669283 

而且ffdf1續ains 677840獨特userid的。所以在1mm行中有一些重複。

+0

@screenchOwl,如果您發佈了一個可重複使用的小例子,我們可以更容易地爲您提供幫助。 –

回答

3

merge.ffdf包含一個bug,目前只允許正確執行內部連接,而不是all.x = TRUE和all.y = FALSE。該功能在@http://code.google.com/p/fffunctions/上工作。問題是當你沒有匹配的記錄時,當做一個左外連接時,爲了正確地允許NA,vmodes需要被改變。這正在努力。

僅供參考。現在在開發版本http://code.google.com/p/fffunctions/中解決此問題,並將在未來幾周內上傳到CRAN。

+1

非常感謝您的信息。你們在ff/ffbase軟件包上做得很好。我發現它們對於大型數據集非常有用。 – screechOwl

+0

@jwijffels現在是否修復了這個錯誤? – Qbik

+0

當然 - 這是固定在2012年6月4日在CRAN上的ffbase 0.5。請參閱http://cran.r-project.org/web/packages/ffbase/NEWS。 – jwijffels