我正在尝试使用data.tables进行一些左连接合并。该软件包的描述引用了以下内容:
在所有连接中,列的名称都不重要;按顺序连接x的关键列
我知道可以使用.data.table[]和data.table :::merge.data.table。
我的需求是:指定键(类似于基本合并中的by.x和by.y)合并X和Y。
假设我有:
在所有连接中,列的名称都不重要;按顺序连接x的关键列
我知道可以使用.data.table[]和data.table :::merge.data.table。
我的需求是:指定键(类似于基本合并中的by.x和by.y)合并X和Y。
假设我有:
DT = data.table(x=rep(c("a","b","c"),each=3),y=c(1,3,6),v=1:9,key="x,y,v")
DT1 = data.frame(x1=c("aa","bb","cc"),y1=c(1,3,6),v1=1:3,key="x1,y1,v1")
我希望您能将此输出:
#data.table:::merge is masking I don't know how to call the base version of merge anymore
R) {base::merge}(DT,DT1,by.x="y",by.y="y1")
y x v x1 v1
1 1 a 1 aa 1
2 1 c 7 aa 1
3 1 b 4 aa 1
4 3 a 2 bb 2
5 3 b 5 bb 2
6 3 c 8 bb 2
7 6 b 6 cc 3
8 6 a 3 cc 3
9 6 c 9 cc 3
我很高兴使用[
或data.table:::merge
,但我希望有一个选项不修改DT
或DT1
(比如更改列名并调用合并,然后再改回来)。
merge.data.table
是S3通用基础函数merge
的一种方法。要调用基础合并函数,可以使用merge.data.frame(DT,DT1,by.x="y",by.y="y1")
。但也请参考我的答案。 - Matt Dowle