我想使用 ffdf 完成以下操作:合并列 X 和 Y 以及最接近的时间,然后合并关闭列 B。但是,我在较小的样本中知道的过程涉及使用外部合并(如下所示)。对于不适合内存的大样本(并且可能不适用于 sqldf),使用 ffbase 有什么方法可以解决这个问题?如果不可能,那么最好的图书馆是什么?
作为可重现的示例,如下所示:
set.seed(1)
df.ff <- as.ffdf(cbind(expand.grid(x = 1:3, y = 1:5), time = round(runif(15) * 30)))
to.merge.ff <- as.ffdf(data.frame(x = c(2, 2, 2, 3, 2), y = c(1, 1, 1, 5, 4), time = c(17, 12, 11.6, 22.5, 2), val = letters[1:5], stringsAsFactors = F))
我在这里从@ChinmayPatil 借用以下示例以突出显示我想遵循的类似过程:(R - 在匹配 A、B 和 *closest* C 时合并数据帧?):
require(data.table)
set.seed(1)
df <- setDT(cbind(expand.grid(x = 1:3, y = 1:5), time = round(runif(15) * 30)))
to.merge <- setDT(data.frame(x = c(2, 2, 2, 3, 2), y = c(1, 1, 1, 5, 4), time = c(17, 12, 11.6, 22.5, 2), val = letters[1:5], stringsAsFactors = F))
## First do a left outer merge
A <- merge(to.merge,df, by = c('x','y'), all.x = T )
## Then calculate a diff row as such
A$diff <- abs(A$time.x - A$time.y)
##then take the minimum distance
A[ , .I[which.min(diff)] , by = c('x', 'y' ) ]