2013-08-02 2 views
0

Я использую пакет ff и пытаюсь выполнить перекрестное соединение. Я знаю, что ffdf merge выполняет только внутреннее и левое внешнее соединение. Есть ли какие-либо настройки, где я могу выполнить перекрестное соединение.R Cross join on ff object

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

Используйте комбинацию expand.ffgrid и merge.ffdf из пакета ffbase.

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

С помощью expand.ffgrid? Можете ли вы сделать воспроизводимый пример, где это происходит. Я могу запустить это на 32-разрядном компьютере с 2 Гб ОЗУ, чтобы получить ffdf с 1 миллиардом строк. требуется (ffbase); a <- ffseq_len (1000); b <- ffseq_len (1000000); x <- expand.ffgrid (a, b); – jwijffels