data.table X[Y] 與 merge

首先舉一個例子

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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章