我想使用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的结果只包含每个组的第一个元素。剩下的该怎么做?
发布于 2017-04-19 23:56:59
merge.ffdf(D,C,by = 'col1',all.x=T)
根据文档,merge.ffdf只允许内部连接(所有匹配的键)或左连接(所有“左”键)。
我认为它将每一行作为一个键来处理,并丢弃重复项。
https://stackoverflow.com/questions/43507704
复制相似问题