Преобразование соединений SQL по внешним ключам в синтаксис R data.table

Пакетdata.tableсодержит множество одинаковых таблиц. методы обработки как SQL. Если у таблицы есть ключ, этот ключ состоит из одного или нескольких столбцов. Но таблица не может иметь более одного ключа, потому что она не может быть отсортирована двумя разными способами одновременно.

В этом примере Xи Y— это data.tableс одним ключевым столбцом «id», Yтакже имеет неключевой столбец "x_id".

   X <- data.table(id = 1:5, a=4:8,key="id")
   Y <- data.table(id = c(1,1, 3,5,7), x_id=c(1,4:1), key="id")

Следующий синтаксис wo uld соединяет таблицы по их ключам:

  X[Y]

Как преобразовать следующий синтаксис SQL в код data.table?

  select * from X join Y on X.id = Y.x_id; 

Самое близкое, что я получил, это:

Y[X,list(id, x_id),by = x_id,nomatch=0]

Однако это не делает то же самое внутреннее соединение, что и оператор SQL.


Вот более наглядный пример, в котором внешний ключ — y_id, и мы хотим, чтобы соединение искало значения Y2, где X2$y_id = Y2$id.

    X2 <- data.table(id = 1:5, y_id = c(1,1,2,2,2), key="id")
    Y2 <- data.table(id = 1:5, b = letters[1:5], key="id")

Я хотел бы создать таблицу:

   id  y_id  b
    1     1 "a"
    2     1 "a"
    3     2 "b"
    4     2 "b"
    5     2 "b"

аналогичную тому, что делается с помощью следующего кладжа:

> merge(data.frame(X2), data.frame(Y2), by.x = "y_id", by.y = "id")
  y_id id b
1    1  1 a
2    1  2 a
3    2  3 b
4    2  4 b
5    2  5 b

Однако, когда я делаю это:

    X2[Y2, 1:2,by = y_id]

Я не получаю желаемого результата:

    y_id V1
[1,]    1  1
[2,]    1  2
[3,]    2  1
[4,]    2  2

19
задан Matt Dowle 29 March 2012 в 10:12
поделиться