我正在观看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]。答案 0 :(得分:6)
更新:下面列出的所有功能都已实施,并且可在CRAN上当前稳定版本的data.table v1.9.6
中使用。
对于data.tables中的连接,至少可以进行这些改进。
merge.data.table
获得by.x
和by.y
参数
使用辅助密钥使用上述两种形式加入,无需设置密钥,而是指定x
和i
上的列。
最简单的原因是我们还没有设法达到它。
答案 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
是您的列W
和d2
是processPath="dotnet"
中的专栏。