Слияние по рассчитанному значению - PullRequest
0 голосов
/ 02 марта 2020

Рассмотрим следующие наборы данных:

left <- data.table(a = 1:3, b = c("foo", "bar", "bar"))
right <- data.table(c = c(1, 4), d = c("foo", "bar"))

Допустим, я хочу объединить left и right на основе общего индекса (a == 1; c == 1).

Вывод будет выглядеть например:

joined <- data.table(a = 1:3, b = c("foo", "bar", "bar"), d = c("foo", "bar", "bar"))

В SQL вы можете СОЕДИНЯТЬ таблицы, используя вычисляемые поля, не объявляя их как отдельные значения:

SELECT * FROM left INNER JOIN right ON (left.a = 1) = (right.c = 1)

Существует ли способ R / data.table для выполнить аналогичную функцию?

1 Ответ

2 голосов
/ 02 марта 2020

SQL в порядке, что подтверждается:

library(sqldf)
sqldf("SELECT * FROM left INNER JOIN right ON (left.a = 1) = (right.c = 1)")
  a   b c   d
1 1 foo 1 foo
2 2 bar 4 bar
3 3 bar 4 bar

Если вы хотите использовать dplyr , то следующий результат дает тот же результат:

library(dplyr)
left %>%
   mutate(a1=a==1) %>%
   left_join(mutate(right, c1=c==1), 
            by=c("a1"="c1")) %>%
   select(-a1)
  a   b c   d
1 1 foo 1 foo
2 2 bar 4 bar
3 3 bar 4 bar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...