Существует метод data.table для внутреннего соединения, который очень эффективен для времени и памяти (и необходим для некоторых более крупных data.frames):
library(data.table)
dt1 <- data.table(df1, key = "CustomerId")
dt2 <- data.table(df2, key = "CustomerId")
joined.dt1.dt.2 <- dt1[dt2]
merge
также работает с данными .tables (поскольку он является общим и вызывает merge.data.table
)
merge(dt1, dt2)
data.table, зарегистрированный в stackoverflow: Как выполнить операцию слияния данных.table Перевод SQL присоединяется к внешним ключам к синтаксису R data.table . Эффективные альтернативы слиянию для больших данных. Кадры R Как сделать базовое левое внешнее соединение с data.table в R?
Еще одна опция - функция join
, найденная в пакете plyr
library(plyr)
join(df1, df2,
type = "inner")
# CustomerId Product State
# 1 2 Toaster Alabama
# 2 4 Radio Alabama
# 3 6 Radio Ohio
Опции для type
: inner
, left
, right
, full
.
Из ?join
: В отличие от merge
, [join
] сохраняет порядок x независимо от того, какой тип соединения используется.
BigQuery не имеет первичных или внешних ключей. Вы должны навязать любую семантику, подходящую для таблиц, которые вы храните. Например, у вас может быть две таблицы, связанные столбцом customer_id
, и вы можете объединить таблицы, используя этот столбец, несмотря на то, что вам не нужно объявлять, что это первичный ключ в одном или внешний ключ в другом. [111 ]