2017-04-19 65 views
1

我想使用ffdf複製以下一對多連接。什麼是最好的方法來做到這一點?一對多在R中使用ffbase

下面我使用data.tables提供了一個我想要得到的例子。我知道merge.ffdf函數的以下說明:

「此方法與基礎包中的合併相似,但只允許內部和外部外部聯接。請注意,聯接是基於ffmatch或ffdfmatch完成的:僅限於y中的第一個元素將被添加到x「。

但是,我想知道是否有解決方法。

> A <- data.table(col1 = LETTERS[1:3],col2 = c("john",'harry','potter')) 
> A 
    col1 col2 
1: A john 
2: B harry 
3: C potter 
> B 
    col1 col2 
1: A 1 
2: A 2 
3: A 3 
4: B 4 
5: B 5 
6: B 6 
7: C 7 
8: C 8 
9: C 9 
> merge(A,B,by = 'col1',all.x = T) 
    col1 col2.x col2.y 
1: A john  1 
2: A john  2 
3: A john  3 
4: B harry  4 
5: B harry  5 
6: B harry  6 
7: C potter  7 
8: C potter  8 
9: C potter  9 

現在用ffdf:

> C <- as.ffdf(as.data.frame(unclass(A))) 
> D <- as.ffdf(as.data.frame(unclass(B))) 
> merge.ffdf(C,D,by = 'col1', all.x = T) 

ffdf (all open) dim=c(3,3), dimorder=c(1,2) row.names=NULL 
ffdf virtual mapping 
     PhysicalName VirtualVmode PhysicalVmode AsIs VirtualIsMatrix PhysicalIsMatrix 
col1   col1  integer  integer FALSE   FALSE   FALSE 
col2.x   col2  integer  integer FALSE   FALSE   FALSE 
col2.y  col2.y  double  double FALSE   FALSE   FALSE 
     PhysicalElementNo PhysicalFirstCol PhysicalLastCol PhysicalIsOpen 
col1     1    1    1   TRUE 
col2.x     2    1    1   TRUE 
col2.y     3    1    1   TRUE 
ffdf data 
    col1 col2.x col2.y 
1 A  john 1  
2 B  harry 4  
3 C  potter 7  
> 

注意,使用ffdf結果只包含各組的第一個元素。剩下的方法是什麼?

回答

1

merge.ffdf(d,C,通過= 'COL1',all.x = T)

按照該文檔,merge.ffdf只允許內部聯接(所有匹配的鍵)或左連接(所有「左」鍵)。

我想它把每個整行作爲一個關鍵字,並丟棄重複。