我有一个data.table问题,我不确定这是否需要两个单独的操作。我有两个data.tables我想通过特定的列合并。但是,如果键之间存在匹配,我只想更新结果中的某些列。如果没有匹配,那么我想将新数据附加到结果中。列名将始终相同,因此无需填写。
要遵循的示例:
在此示例中,我想按n2
进行合并,但只有在n3
和{{1}之间存在匹配的n2
值时,才会在结果中更改dat
否则,将new_dat
的数据追加到new_dat
。
dat
这是否需要两个步骤:首先更新匹配变量,然后附加不匹配的变量?或者,我可以以某种方式使用合并吗?
答案 0 :(得分:3)
由于这实际上是具有一些额外条件的外部合并,因此您无法在[
运算符中的单个步骤中执行此操作。我会做以下事情:
rbind(copy(dat)[new_dat, n3 := i.n1, on = "n2"], new_dat[!dat, on = 'n2'])
# n1 n2 n3
#1: a k aa
#2: b l g
#3: c m h
#4: d n i
#5: e o j
#6: z xyz b
(如果您不关心对原始数据的修改,可以删除copy
)