2013-08-02 51 views
0

我正在使用ff软件包并试图进行交叉连接。我知道ffdf合并只执行内部和外部的外部连接。有什么调整,我可以做交叉加入。R交叉加入ff对象

a=as.ffdf(data.frame(a=1:10,b=11:20)) 
z=as.ffdf(data.frame(y=2:4)) 

请帮我cross join a and z ff object.

感谢

+0

一种在循环中使用'ffdfappend函数的方法'。这将像交叉连接一样工作。 – Ajay

回答

0

从包ffbase使用expand.ffgrid和merge.ffdf的组合。

require(ff) 
a=as.ffdf(data.frame(a=1:10,b=11:20)) 
z=as.ffdf(data.frame(y=2:4)) 

require(ffbase) 
a$a.key <- ikey(a) 
z$z.key <- ikey(z) 
combined <- expand.ffgrid(a.key = a$a.key, z.key = z$z.key) 
combined <- merge(combined, a, by.x="a.key", by.y="a.key", all.x=TRUE, all.y=FALSE) 
combined <- merge(combined, z, by.x="z.key", by.y="z.key", all.x=TRUE, all.y=FALSE) 
+0

运行带有大数据集的expand.ffgrid时出现内存错误。 – Ajay

+0

With expand.ffgrid?您可以在发生这种情况时制作一个可重现的例子。我可以在2Gb RAM的32位计算机上运行此操作,以获得具有10亿行的ffdf。要求(ffbase);一个< - ffseq_len(1000); b < - ffseq_len(1000000); x < - expand.ffgrid(a,b); – jwijffels