У меня есть ключ data.table
, к которому я хотел бы добавить строки из другой таблицы с таким же ключом:
library(data.table)
key.cols <- c("ID", "Code")
set.seed(1)
DT1 = data.table(
ID = c("b","b","b","a","a","c"),
Code = LETTERS[seq(1,6)],
Number = runif(6)
);DT1
DT2 = data.table(
ID = c("a","a","c","b","b","b"),
Code = LETTERS[seq(4,9)],
Number = runif(6)
);DT2
Я хотел бы добавить только к DT1
строки из DT2
из ключей, которые не встречаются в DT1
, то есть rbind
относительное дополнение:
https://en.wikipedia.org/wiki/Complement_(set_theory)#Relative_complement
Я могу попробовать использовать setops
и просто добавить ключи, позволяющиестолбцы, заполненные ключом, заполняются NA
и присоединяются к ним впоследствии:
DT1 <- rbind(DT1, fsetdiff(DT2[,(key.cols), with=FALSE], DT1[,(key.cols), with=FALSE]), fill=TRUE)
DT1[DT2, Number:=ifelse(is.na(Number), i.Number, Number), on = key.cols];DT1
Есть ли менее громоздкий способ сделать это?