Ответ 1
Извините за ответ на мой собственный вопрос, но я думаю, что это стоит поделиться:
Очень быстрое решение похоже на обновление до последней версии data.table(1.8.0). (Большое вам спасибо, Мэтью!)
Вот мои тестовые данные и результаты тестов:
С data.table:
full_index <- 1:5000000
ratio_in_samples <- 0.8
x <- data.table(index = sample(full_index, length(full_index)*ratio_in_samples),
var1 = rnorm(length(full_index)*ratio_in_samples),
key = "index")
y <- data.table(index = sample(full_index, length(full_index)*ratio_in_samples),
var2 = rnorm(length(full_index)*ratio_in_samples),
key = "index")
system.time(
result <- merge(x,y, all=TRUE)
)
Время с data.table:
user system elapsed
5.05 0.55 5.62
В то время как с data.frame:
full_index <- 1:5000000
ratio_in_samples <- 0.8
x <- data.frame(index = sample(full_index, length(full_index)*ratio_in_samples),
var1 = rnorm(length(full_index)*ratio_in_samples))
y <- data.frame(index = sample(full_index, length(full_index)*ratio_in_samples),
var2 = rnorm(length(full_index)*ratio_in_samples))
system.time(
result <- merge(x,y, all=TRUE)
)
Время с data.frame:
user system elapsed
78.83 1.75 80.67