data.table X[Y] 与 merge
程序员文章站
2022-03-03 10:11:48
...
首先举一个例子
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)
上一篇: Python中的Numpy模块(1)
下一篇: 原始语料库