R: data.table:: = в обратном случае - PullRequest
0 голосов
/ 05 декабря 2018

Предположим, у меня есть два набора данных, которые я хочу соединить влево,

i <- data.table(id=1:3, k=7:9, l=7:9, m=7:9, n=7:9)

и

x <- data.table(id=c(1,2), x=c(10,20))

Чтобы соединиться влево, сохраняя все строки в i, я выполняю

x[i, .(id=i.id, k=i.k, l=i.l, m=i.m, n=i.n, x=x.x), on=.(id=id)]

но мне интересно, есть ли более простой и эффективный способ, который делает ненужным изложение всех столбцов из i.

Например, в обратном случае (то есть, когда я хочу сохранить все столбцы с i), я мог бы использовать оператор :=, как в x[i, k:=i.k, on=.(id=id)].Насколько я понимаю, это делает вещи более эффективными, потому что столбцы копировать не нужно.Есть ли что-то сопоставимое для этого случая?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Что не так с слиянием?

  y <- merge(i, x, all.x = TRUE, by = "id")
0 голосов
/ 05 декабря 2018

вы можете использовать таблицы данных setcolorder() после объединения ..

setcolorder( x[i, on = "id"], c( names(i), "x" ) )

#    id k l m n  x
# 1:  1 7 7 7 7 10
# 2:  2 8 8 8 8 20
# 3:  3 9 9 9 9 NA
...