1

我想使用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 的结果仅包含每个组的第一个元素。获得其余部分的方法是什么?

4

1 回答 1

1

合并.ffdf(D,C,by = 'col1', all.x=T)

根据文档,merge.ffdf 仅允许内连接(所有匹配键)或左连接(所有“左”键)。

我想它将每一行都视为一个键,并丢弃重复项。

于 2017-04-19T23:56:59.587 回答