note: this question and the following answers refer to data.table versions < 1.5.3; v. 1.5.3 was released in Feb 2011 to resolve this issue.见近期治疗(2012年3月):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的连接,但会对排序键进行二进制搜索."显然情况并非如此.我可以用数据把y中的其他列转换成x[y]的结果吗.桌子?它似乎只取x的键与y的键匹配的行,但完全忽略y的其余部分...

推荐答案

你引用了错误的文档部分.如果你看一下[.data.table人的文件,你会读到:

当我是一名数据员时.表,x必须有一个

我承认软件包的描述(你引用的部分)有些令人困惑,因为它似乎说"["-操作可以用来代替合并.但我认为它说的是:如果x和y都是数据表,我们使用索引上的连接(就像合并一样调用)来代替二进制搜索.


One more thing:

数据.我通过install.packages安装的表库缺少merge.data.table method,所以使用merge会调用merge.data.frame.安装了package from R-ForgeR之后,使用了更快的merge.data.table方法.

您可以判断是否有合并.数据通过判断以下各项的输出,表方法:

methods(generic.function="merge")

EDIT [Answer no longer valid]:这个答案指的是数据.表1.3版.在版本1.5.3中,数据的行为.表已更改,x[y]返回预期结果.谢谢你,数据的作者.表,以便在 comments 中指出这一点.

R相关问答推荐

如何使用R以NASAGIBS.ViirsEarthAtNight2012风格绘制自定义 map

返回句子中最长的偶数长单词

以R表示的gglikert地块调整总数

按崩溃类别分类的指数

使用ggcorrplot在相关性矩阵上标注supertitle和index标签

如果索引重复,聚合xts核心数据

具有多个依赖变量/LHS的逻辑模型

查找具有平局的多个列的最大值并返回列名或平局 destruct 者NA值

检测(并替换)字符串中的数学符号

咕噜中的元素列表:map

R:更新后无法运行控制台

以R中的正确顺序将日期时间字符列转换为posixct

有没有一种方法可以从函数中创建一个值的列表,然后将这些值变成R中的直方图?我一直觉得不行

如何自定义Shapviz图?

自动变更列表

通过在colname中查找其相应值来创建列

如何将一列中的值拆分到R中各自的列中

填充图例什么时候会有点?

附加中缀操作符

如何在shiny 的应用程序 map 视图宣传单中可视化单点