我有两个表A1和A2,我想在所有列上加入(目的是有一个可用于跟踪数据更改的函数)。是否有一种简单的方法可以连接所有列而无需明确指定它们。
像A1[A2, on="ALL"]
如果有人需要一些代码示例我可以提供它,但更常见的问题是我是否遗漏了data.table的帮助部分中的内容。
我正在寻找一个data.table解决方案。如果没有,我将使用dplyr' s:
inner_join(A1, A2, by = NULL)
答案 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)