Я хотел бы воспроизвести следующее соединение «один ко многим» с помощью ffdf
. Как лучше всего это сделать?
Ниже я привожу пример того, что я хотел бы получить, используя 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 содержит только первый элемент каждой группы. Как можно было бы получить остальное?