根据不同的列名连接表

时间:2014-12-23 01:22:17

标签: r data.table

我正在观看Greg Reda关于Pandas的视频[1],看看Pandas可以做些什么与data.table进行比较。我很惊讶地发现在data.table中连接表是多么困难。如果您观看视频,特别是@ 49:00到@ 52:00分钟,您会看到Pandas允许您根据不同的列名称连接表格,您可以为左右表格选择不同的后缀。我知道setkey用于优化目的[2],并了解如何使用相同的列名连接表[3]。我尝试了data.table的合并,但是使用不同的列名设置by=关键字参数有很多困难。所以这是我的问题。

在data.table中,是否可以根据不同的列名连接表?如果是这样,怎么样?如果没有,为什么不呢?此外,更有用的是,这个功能不是很有用吗?我觉得这个问题没有提前出现令人惊讶。如果之前已经讨论过,请原谅我(并请指出他们)。

顺便说一下,Greg正在谈论的数据可以在他的github上找到[4]。

  1. https://www.youtube.com/watch?v=1uVWjdAbgBg
  2. https://stackoverflow.com/a/13686768/3892933
  3. Joining tables with identical (non-keyed) column names in R data.table
  4. https://github.com/gjreda/pydata2014nyc

3 个答案:

答案 0 :(得分:6)

更新:下面列出的所有功能都已实施,并且可在CRAN上当前稳定版本的data.table v1.9.6中使用。


对于data.tables中的连接,至少可以进行这些改进。

  • merge.data.table获得by.xby.y参数

  • 使用辅助密钥使用上述两种形式加入,无需设置密钥,而是指定xi上的列。

最简单的原因是我们还没有设法达到它。

答案 1 :(得分:2)

通常,在加入data.tables时,列名实际上并不重要。您只需要确保两个表都有兼容的密钥。

library(data.table)
dt1<-data.table(a=letters[1:10], b=1:10)
setkey(dt1,a)
dt2<-data.table(x=letters[1:10], y=10:1)
setkey(dt2,x)

dt1[dt2]

基本上它会加入所有关键列。通常你正在加入一把钥匙。如果确实需要指定非键列,则始终可以将data.table强制转换为data.frame并使用标准merge()函数

merge(as.data.frame(dt1),dt2, by.x="a", by.y="x")
merge(as.data.frame(dt1),dt2, by.x="b", by.y="y")

答案 2 :(得分:0)

参考Rdatatable github页面,如果您想在联接上执行功能而不仅仅是合并表,您也可以执行A,其中d1是您的列Wd2processPath="dotnet"中的专栏。