R data.table - 在不指定列名的情况下连接所有列的简单方法

时间:2016-10-17 07:18:50

标签: r join data.table

我有两个表A1和A2,我想在所有列上加入(目的是有一个可用于跟踪数据更改的函数)。是否有一种简单的方法可以连接所有列而无需明确指定它们。

A1[A2, on="ALL"]

这样的东西

如果有人需要一些代码示例我可以提供它,但更常见的问题是我是否遗漏了data.table的帮助部分中的内容。

我正在寻找一个data.table解决方案。如果没有,我将使用dplyr' s:

inner_join(A1, A2, by = NULL)

2 个答案:

答案 0 :(得分:2)

我认为在数据表中执行此操作的方法如下:

require(data.table)
dt1 <- data.table(A1 = c(1,2,3), A2 = c("A", "B", "D"))
dt2 <- data.table(A1 = c(3,2,3), A2 = c("A", "B", "C"))

setkeyv(dt1, names(dt1))
setkeyv(dt2, names(dt2))

并且所有公共列上的内部联接是:

dt1[dt2, nomatch = 0]

其他选项包括以下内容(评论中给Frank的信用):

dt1[dt2, on=names(dt2), nomatch = 0]

这样做的好处是不需要键入数据表。 (更多信息可以在这里找到:What is the purpose of setting a key in data.table?

使用数据集操作的另一个选项(在1.9.7或更高版本中可用):

fintersect(dt1, dt2)

答案 1 :(得分:1)

使用给定的示例,另一个选项是'dplyr'包。

library(dplyr)
df1 <- data.frame(A1 = c(1,2,3), A2 = c("A", "B", "D"))
df2 <- data.frame(A1 = c(3,2,3), A2 = c("A", "B", "C"))

inner_join(df1, df2)