R 合并具有不同列名的表

R 合并具有不同列名的表,r,merge,data.table,R,Merge,Data.table,如果我理解正确,默认情况下,data.table通过比较设置为键且具有相同名称的列来合并两个表。如果我有不同列名的表,我应该如何写?例如: set.seed(123) DT1<-data.table(col1=sample(letters,5,replace=TRUE),col2=sample(LETTERS[1:5],5,replace=TRUE),col3=sample(1:2,5,replace=TRUE)) DT2<-data.table(col4=sample(1:3,10

如果我理解正确,默认情况下,
data.table
通过比较设置为键且具有相同名称的列来合并两个表。如果我有不同列名的表,我应该如何写?例如:

set.seed(123)
DT1<-data.table(col1=sample(letters,5,replace=TRUE),col2=sample(LETTERS[1:5],5,replace=TRUE),col3=sample(1:2,5,replace=TRUE))
DT2<-data.table(col4=sample(1:3,10,replace=TRUE),col5=sample(LETTERS[1:5],10,replace=TRUE),col6=sample(1:100,10,replace=TRUE))
(DT1)
(DT2)

> (DT1)
   col1 col2 col3
1:    h    A    2
2:    u    C    1
3:    k    E    2
4:    w    C    2
5:    y    C    1
> (DT2)
    col4 col5 col6
 1:    3    D   48
 2:    1    C   76
 3:    1    C   22
 4:    1    B   32
 5:    3    A   24
 6:    3    E   15
 7:    3    E   42
 8:    2    D   42
 9:    3    D   37
10:    2    A   16

提前谢谢

使用data.table的基于子集的联接以及最近实现的
on=
参数和
nomatch=0L
,这就是:

DT2[DT1, on=c(col5="col2", col4="col3"), nomatch=0L]
更多信息请参见小插曲


或者,如果已键入data.tables,则可以跳过
on=
参数。但是上面的解决方案是惯用的,因为它保留了原始data.tables的顺序,并且通过查看代码可以清楚地知道正在查找哪些列

setkey(DT1, col2, col3)
setkey(DT2, col5, col4)
DT2[DT1, nomatch=0L]

查看旧版本的历史记录。

您能告诉我们您期望的输出吗?我要补充的是,在试图找出
数据的原因时,这是一个需要考虑的好问题。当您没有谨慎地指定键时,表
合并到“错误”列上。太好了!我不知道
setkey
功能的这些细节。非常感谢你!
setkey(DT1, col2, col3)
setkey(DT2, col5, col4)
DT2[DT1, nomatch=0L]