R data.table объединяет две таблицы и сохраняет все строки [дубликаты]

Иметь ДТ1, ДТ2; нужно «присоединить» их и сохранить все ряды; результат - ДТ3. Как этого добиться?

 require(data.table)
DT1 <- data.table(ID_1 = 1:2, val_1 = 1:2)
DT2 <- data.table(ID_2 = 3:4, val_2 = 3:4)

DT1
DT2

DT3 <- data.table(ID_1 = c(1,1,2,2), ID_2 = c(3,4,3,4), val_1 = c(1,1,2,2), val_2 = c(3,4,3,4))
DT3

person LeGeniusII    schedule 09.04.2019    source источник
comment
см. github.com/Rdatatable/data.table/pull/814.   -  person chinsoon12    schedule 09.04.2019


Ответы (2)


Это кросс-соединение, назначающее новый ключ, чтобы помочь merge

DT1$Key=1
DT2$Key=1
DT3=merge(DT1,DT2,by='Key')
DT3 #DT3$Key=NULL remove the key 
   Key ID_1 val_1 ID_2 val_2
1:   1    1     1    3     3
2:   1    1     1    4     4
3:   1    2     2    3     3
4:   1    2     2    4     4
person BENY    schedule 09.04.2019

Мы можем использовать crossing из tidyr

tidyr::crossing(DT1, DT2)
# A tibble: 4 x 2
#  DT1$ID_1 $val_1 DT2$ID_2 $val_2
#     <int>  <int>    <int>  <int>
#1        1      1        3      3
#2        1      1        4      4
#3        2      2        3      3
#4        2      2        4      4
person Ronak Shah    schedule 09.04.2019