Data.table条件合并

Juu*_*es6 4 r data.table

我想使用 dt1 中变量的条件合并两个 data.table。请参见以下示例:

\n
library(data.table)\n\n# Example data tables\ndt1 <- data.table(id = 1:5, var1 = c(1, 0, 1, 0, 1), name1 = c("A", "B", "C", "D", "E"))\ndt2 <- data.table(name2 = c("A", "B", "C", "D", "E"), other_var = 101:105)\n
Run Code Online (Sandbox Code Playgroud)\n
> dt1\n   id var1 name1\n1:  1    1     A\n2:  2    0     B\n3:  3    1     C\n4:  4    0     D\n5:  5    1     E\n> dt2\n   name2 other_var\n1:     A       101\n2:     B       102\n3:     C       103\n4:     D       104\n5:     E       105\n
Run Code Online (Sandbox Code Playgroud)\n

我想做的是合并 dt1 和 dt2,这样只有当 dt1 中 var1 == 1 时才合并值。期望的结果:

\n
> dt1\n   id var1 name1  other_var\n1:  1    1     A       101\n2:  2    0     B        NA\n3:  3    1     C       103\n4:  4    0     D        NA\n5:  5    1     E       105\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试过类似的事情:

\n
\ndt1[var1 == 1][dt2, other_var := i.other_var, on = .(name1 = name2)]\xc2\xa0\n
Run Code Online (Sandbox Code Playgroud)\n

\n
dt1[dt2, on = .(name1 = name2), other_var := i.other_var, var1 == 1]\n
Run Code Online (Sandbox Code Playgroud)\n

但这两种方法似乎都不起作用。我究竟做错了什么?

\n

Sam*_*amR 7

您正在表达要加入的条件,因此请设置dt2[, var1 := 1]然后加入var1以及名称:

dt2[, var1 := 1]

dt1[dt2,
    on = .(name1 = name2, var1),
    other_var := i.other_var
][]

#       id  var1  name1 other_var
#    <int> <num> <char>     <int>
# 1:     1     1      A       101
# 2:     2     0      B        NA
# 3:     3     1      C       103
# 4:     4     0      D        NA
# 5:     5     1      E       105
Run Code Online (Sandbox Code Playgroud)

这应该相当快。如果添加列出现问题,只需在连接 ( dt2[, var1 := NULL]) 之后将其删除即可。