inner join吧。你用啥都是可以的。比如bash的join(先对id排序再merge)或者类SQL的所有玩意儿。
当然,如果你两个表含有
完全相同的ID,你排序后直接把V2插入就好了。
-------------------复杂度分析和代码-----------------------------
排序复杂度在 O(nlog n), 合并也在这个量级。所以也不算慢。内存需求的话,单个表,即便是 ID(Long int) V1(Double)也就在300MB左右(309Mb),两个都是long int在200Mb左右。但是注意这样你至少需要大约1G去存储数据(两张表加新生成的表)。比方说弄个小点例子
set.seed(9527)
mat = data.frame(ID=1:2.7e7,V1=sample(1:100,2.7e7,replace = T))
mat2 = data.frame(ID=sample(1:20000, 200), V2=sample(1:100,200,replace = T))
# sort
mat2=mat2[order(mat2[,1]),]
library(dplyr)
mat3 = inner_join(mat,mat2,by="ID")
head(mat3)
ID V1 V2
1 67 10 6
2 247 32 51
3 260 18 86
4 273 72 33
5 335 55 31
6 346 95 38
-------------------乱七八糟的tips----------------------
此时,如果V1还是Long INT,那么最好用matrix去干这种事情。比如
> mat <- matrix(c(1:2.7e7,sample(1:100,2.7e7,replace = T)), ncol=2)
> print(object.size(mat),units='Mb')
206 Mb
colnames(mat)=c('ID','V1')
当然偷懒的话,data frame也没啥。