理解data.table左连接底层逻辑及示例执行疑问
data.table连接操作的底层逻辑疑问
基础示例与困惑
在data.table官方文档中看到左连接语法:
X[DT, on="x"] # left join
运行以下示例:
A <- data.table("a"=1:4, "b"=12:15) B <- data.table("a"=2:3, "b"=13:14) B[A, on='a']
得到结果:
a b i.b 1: 1 NA 12 2: 2 13 13 3: 3 14 14 4: 4 NA 15
我原本以为这个操作是在B的范围内遍历A的每一行,在B中匹配on指定的条件,存储匹配索引后继续处理B的下一行,但无法理解无匹配时为何会保留A的行(第一行和最后一行)。这种连接显然不只是匹配on条件并应用索引到B这么简单。
补充疑问与未明确的示例
我必须搞懂这类操作的底层过程,不理解底层逻辑会导致使用出错。有人建议用merge.data.table替代,但这恰恰反映了这个问题的普遍性。data.table原本计划推出连接相关的vignette,但多年来一直没有落地。
比如以下两个示例从未看到过明确解释:
A <- data.table("a"=1:4, "b"=12:15) B <- data.table("a"=c(2:3,6), "b"=13:15) # 标注为A左连接B B[A, on='a'] # 标注为同样是A左连接B,保留最后匹配的重复项 A[B, on = 'a', bb := i.b]
这两个操作到底在执行什么?
内容的提问来源于stack exchange,提问作者Helen
相关产品推荐
相关产品推荐

