Junção binária condicional e atualização por referência usando o pacote data.table

Então, aqui está o meu problema da vida real, que eu sinto que pode ser facilmente resolvido e estou perdendo algo óbvio aqui. Eu tenho dois grandes conjuntos de dados chamadosTK eDFT

library(data.table)
set.seed(123)
(TK <- data.table(venue_id = rep(1:3, each = 2), 
                  DFT_id = rep(1:3, 2), 
                  New_id = sample(1e4, 6),
                  key = "DFT_id"))

#    venue_id DFT_id New_id
# 1:        1      1   2876
# 2:        1      2   7883
# 3:        2      3   4089
# 4:        2      1   8828
# 5:        3      2   9401
# 6:        3      3    456

(DFT <- data.table(venue_id = rep(1:2, each = 2), 
                   DFT_id = 1:4, 
                   New_id = sample(4),
                   key = "DFT_id"))

#    venue_id DFT_id New_id
# 1:        1      1      3
# 2:        1      2      4
# 3:        2      3      2
# 4:        2      4      1

Eu quero fazer umajunção esquerda binária paraTK noDFT_id coluna quandovenue_id %in% 1:2, enquanto atualizaNew_id por referência. Em outras palavras, o resultado desejado seria

TK
#    venue_id DFT_id New_id
# 1:        1      1      3
# 2:        2      1      3
# 3:        1      2      4
# 4:        3      2   9401
# 5:        2      3      2
# 6:        3      3    456

Eu estava pensando em combinar as duas condições, mas não funcionou (ainda não sei por quê)

TK[venue_id %in% 1:2 & DFT, New_id := i.New_id][]
# Error in `[.data.table`(TK, DFT & venue_id %in% 1:2, `:=`(New_id, i.New_id)) : 
#   i is invalid type (matrix). Perhaps in future a 2 column matrix could return a list of elements of DT (in the spirit of A[B] in FAQ 2.14). 
# Please let datatable-help know if you'd like this, or add your comments to FR #1611.

Minha próxima idéia foi usar o encadeamento que atinge parcialmente o objetivo ao ingressar corretamente, mas em alguma tabela temporária sem afetar de fatoTK

TK[venue_id %in% 1:2][DFT, New_id := i.New_id][]
TK
#    venue_id DFT_id New_id
# 1:        1      1   2876
# 2:        2      1   8828
# 3:        1      2   7883
# 4:        3      2   9401
# 5:        2      3   4089
# 6:        3      3    456

Então, para deixar claro, estou ciente de que posso dividirTK em duas tabelas, execute a junção e depoisrbind novamente, mas estou fazendo muitas associações condicionais diferentes como essa e também estou procurando soluções eficientes em velocidade e memória.

Isso também significa que eu sounão procurando umdplyr solução como eu estou tentando usar os doisjunção binária e aatualização por referência recursos que existem apenas nodata.table pacote IIRC.

Para informações adicionais, consulte estas vinhetas:

Atualização por referênciaJunções binárias

questionAnswers(2)

yourAnswerToTheQuestion