gpt4 book ai didi

r - 如何进行data.table合并操作

转载 作者:行者123 更新时间:2023-12-02 06:03:16 25 4
gpt4 key购买 nike

注意:这个问题和以下答案引用 data.table 版本 < 1.5.3; v. 1.5.3 于 2011 年 2 月发布,旨在解决此问题。 请参阅最近的处理 (03-2012): Translating SQL joins on foreign keys to R data.table syntax

<小时/>

我一直在挖掘 data.table package 的文档(data.frame 的替代品,对于某些操作来说效率更高),包括 Josh Reich's presentation on SQL and data.table at the NYC R Meetup (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 的其余部分...

最佳答案

您引用了文档的错误部分。如果您查看 [.data.table 的文档,您将读到:

When i is a data.table, x must have a key, meaning join i to x and return the rows in x that match. An equi-join is performed between each column in i to each column in x’s key in order. This is similar to base R functionality of sub- setting a matrix by a 2-column matrix, and in higher dimensions subsetting an n-dimensional array by an n-column matrix

我承认包的描述(你引用的部分)有点令人困惑,因为它似乎说可以使用“[”操作来代替合并。但我认为它的意思是:如果 x 和 y 都是 data.tables,我们在索引上使用联接(像合并一样调用)而不是二分搜索。

<小时/>

还有一件事:

我通过 install.packages 安装的 data.table 库缺少 merge.data.table 方法,因此使用 merge 会调用merge.data.frame。安装package from R-Forge后R 使用更快的 merge.data.table 方法。

您可以通过检查以下输出来检查是否有 merge.data.table 方法:

methods(generic.function="merge")
<小时/>

编辑[答案不再有效]:此答案引用 data.table 版本 1.3。在版本 1.5.3 中,data.table 的行为发生了变化,x[y] 返回了预期的结果。谢谢Matthew Dowle data.table 的作者,在评论中指出了这一点。

关于r - 如何进行data.table合并操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2232699/

25 4 0