data.table X[Y] 与 merge

本文详细介绍了数据表连接的四种方式:内连接、左连接、右连接和全连接,并通过具体的R语言data.table包实例,展示了如何实现这些连接操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先举一个例子

library(data.table)
X <- data.table(t = 1:4, a = (1:4)^2)
 setkey(X, t)
X
#    t  a
# 1: 1  1
# 2: 2  4
# 3: 3  9
# 4: 4 16

Y <- data.table(t = 3:6, b = (3:6)^2)
setkey(Y, t)
Y
#    t  b
# 1: 3  9
# 2: 4 16
# 3: 5 25
# 4: 6 36

两张表有共同的列 “t”,且t值存在交集

表的连接方式:内连接、左连接、右连接、全连接。根据上面的例子继续介绍
1.内连接
即根据主键寻找共同的交集

X[Y, nomatch = 0]  
#    t  a  b
# 1: 3  9  9
# 2: 4 16 16

merge(X, Y, by = "t", all = FALSE)  # same as above
#    t  a  b
# 1: 3  9  9
# 2: 4 16 16

如果要设置多个主键的话,需要提前设置:

setkey(X,col1,col2)
merge(X,Y,by=c("col1",''col2"))

以上是使用的具体方式。

2.右连接
右连接就是全部显示右边表的主键列的值,但是不显示左边表主键列的值,看例子:

X[Y]  # default
#  t  a  b
# 1: 3  9  9
# 2: 4 16 16
# 3: 5 NA 25
# 4: 6 NA 36

X[Y, nomatch = NA]  # same as above
#    t  a  b
# 1: 3  9  9
# 2: 4 16 16
# 3: 5 NA 25
# 4: 6 NA 36

merge(X, Y, by = "t", all.y = TRUE)  # same as above
#    t  a  b
# 1: 3  9  9
# 2: 4 16 16
# 3: 5 NA 25
# 4: 6 NA 36

3.左连接
左连接就是全部显示左边表的主键列的值,但是不显示右边表主键列的值,看例子:

merge(X, Y, by = "t", all.x = TRUE)
#    t  a  b
# 1: 1  1 NA
# 2: 2  4 NA
# 3: 3  9  9
# 4: 4 16 16

4.全连接

merge(X, Y, by = "t", all = TRUE)
#    t  a  b
# 1: 1  1 NA
# 2: 2  4 NA
# 3: 3  9  9
# 4: 4 16 16
# 5: 5 NA 25
# 6: 6 NA 36

总结

如果要求交集,X[Y,nomatch=0] 或者merge(X,Y,by=,all = FALSE)
如果要求全集merge(X,Y,by=,all = TRUE)
如果要求右连接,X[Y,nomatch = NA] 或者 merge(X,Y,by=,all.y = TRUE)
如果要求左连接,merge(X,Y,by=,all.x=TRUE)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值