我试图data.table
从文档中理解逻辑并且有点不清楚。我知道我可以试试这个看看会发生什么,但我想确保没有病态的情况,因此想知道逻辑是如何实际编码的。当两个data.table
对象具有不同数量的键列时,例如a
有 2 和b
3,并且您运行c <- a[b]
, 将简单a
地b
合并在前两个键列上,或者将 a 中的第三列自动合并到中的第三个键列b
? 一个例子:
require(data.table)
a <- data.table(id=1:10, t=1:20, v=1:40, key=c("id", "t"))
b <- data.table(id=1:10, v2=1:20, key="id")
c <- a[b]
这应该选择与中的键列a
匹配的行。例如,对于in ,有 2 行 in和 4 行应该在 中生成 8 行。这确实是似乎发生的事情:id
b
id==1
b
b
a
c
> head(c,10)
id t v v2
1: 1 1 1 1
2: 1 1 21 1
3: 1 11 11 1
4: 1 11 31 1
5: 1 1 1 11
6: 1 1 21 11
7: 1 11 11 11
8: 1 11 31 11
9: 2 2 2 2
10: 2 2 22 2
尝试它的另一种方法是:
d <-b[a]
这应该做同样的事情:对于其中的每一行都a
应该选择匹配的行b
:因为a
有一个额外的键列,t
所以该列不应该用于匹配,并且应该只基于第一个键列id
进行连接。情况似乎是这样的:
> head(d,10)
id v2 t v
1: 1 1 1 1
2: 1 11 1 1
3: 1 1 1 21
4: 1 11 1 21
5: 1 1 11 11
6: 1 11 11 11
7: 1 1 11 31
8: 1 11 11 31
9: 2 2 2 2
10: 2 12 2 2
有人可以确认吗?需要明确的是:是a
曾经在任何合并中使用过的第三个键列,还是data.table
仅使用min(length(key(DT)))
两个表中的。