我正在尝试与data.tables进行一些左连接合并.包描述引用
在所有连接中,列的名称无关紧要; x键的列按顺序连接
我明白我可以使用.data.table[和data.table:::merge.data.table
我想要的是:合并X和Y指定键(如基础合并中的by.x和by.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")
Run Code Online (Sandbox Code Playgroud)
我希望这个输出:
#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 …Run Code Online (Sandbox Code Playgroud) 如果我理解正确,默认情况下,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
Run Code Online (Sandbox Code Playgroud)
我应该写什么DT1[ …
首先我要说的是,这是我在堆栈溢出时发布的第一个问题.如果我需要在我的问题中更改样式,格式等,请告诉我.
我想对两个数据表执行左外连接操作,其中一个exra条件允许我对两个数据表中的关键变量使用不同的名称.例:
DT1 = data.table(x1=c("b","c", "a", "b", "a", "b"), x2a=1:6,m1=seq(10,60,by=10))
setkey(DT1,x1,x2a)
> DT1
x1 x2a m1
1: a 3 30
2: a 5 50
3: b 1 10
4: b 4 40
5: b 6 60
6: c 2 20
DT2 = data.table(x1=c("b","d", "c", "b","a","a"),x2b=c(1,4,7,6," "," "),m2=5:10)
setkey(DT2,x1,x2b)
> DT2
x1 x2b m2
1: a 9
2: a 10
3: b 1 5
4: b 6 8
5: c 7 7
6: d 4 6
############# first, I use the …Run Code Online (Sandbox Code Playgroud) 我正在观看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].