注意:这个问题和以下答案是指 data.table 版本 < 1.5.3;v. 1.5.3 于 2011 年 2 月发布以解决此问题。查看更多最新处理(03-2012):将外键上的 SQL 连接转换为 R data.table 语法
我一直在研究data.table 包的文档(替代 data.frame 对某些操作更有效),包括Josh Reich 在 NYC R Meetup 上关于 SQL 和 data.table 的演示(pdf),但是无法弄清楚这个完全微不足道的操作。
> x <- DT(a=1:3, b=2:4, key='a')
> x
a b
[1,] 1 2
[2,] 2 3
[3,] 3 4
> y <- DT(a=1:3, c=c('a','b','c'), key='a')
> y
a c
[1,] 1 a
[2,] 2 b
[3,] 3 c
> x[y]
a b
[1,] 1 2
[2,] 2 3
[3,] 3 4
> merge(x,y)
a b c
1 1 2 a
2 2 3 b
3 3 4 c
文档说“当 [第一个参数] 本身是一个 data.table 时,调用类似于 base::merge 的连接,但在排序键上使用二进制搜索。” 显然情况并非如此。我可以使用 data.tables 将 y 中的其他列转换为 x[y] 的结果吗?似乎它只是取 x 的行,其中键与 y 的键匹配,但完全忽略了 y 的其余部分......