У меня есть длинный список data.tables. Я хочу объединить (внутреннее соединение) их все в одну таблицу данных.
С dplyr
и purrr
я могу:
dt1 <- data.table(cbind(letters[1:10], 1:10))
dt2 <- data.table(cbind(letters[3:12], 3:12))
dt3 <- data.table(cbind(letters[5:15], 5:15))
dtl <- list(dt1, dt2, dt3)
library(dplyr)
library(purrr)
merged <- dtl %>% reduce(inner_join, by='V1')
Как я могу сделать это с помощью data.table?
Мы можем использовать присоединиться on
library(data.table)
na.omit(Reduce(function(x, y) x[y, on = .(V1)], dtl))
Спасибо. Из того, что я могу проверить, решение data.table не намного быстрее, чем мой текущий dplyr + purrr, который в миллион раз приятнее читать...
@francoiskroll хорошо, спасибо за комментарий. Я думал, что вопрос был о том, как это сделать в data.table
О да, это было очень жаль! Думаю, я просто разочарован, что нет большой разницы, как и во всем data.table :)
@francoiskroll все в порядке. В большинстве случаев data.table эффективен. Я не знал, что в этом случае будет большая разница
К вашему сведению, есть открытая проблема с предложениями по
mergelist
и связанным с ними функциям. Текущий подход заключается в использованииReduce(...)
.