Я хотел бы выполнить следующее, используя 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 и * ближайшего * 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' ) ]