我想使用 dt1 中变量的条件合并两个 data.table。请参见以下示例:
\nlibrary(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)\nRun 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\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n我尝试过类似的事情:
\n\ndt1[var1 == 1][dt2, other_var := i.other_var, on = .(name1 = name2)]\xc2\xa0\nRun Code Online (Sandbox Code Playgroud)\n和
\ndt1[dt2, on = .(name1 = name2), other_var := i.other_var, var1 == 1]\nRun Code Online (Sandbox Code Playgroud)\n但这两种方法似乎都不起作用。我究竟做错了什么?
\n您正在表达要加入的条件,因此请设置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]) 之后将其删除即可。