3 回答

TA貢獻1880條經驗 獲得超4個贊
引用data.table FAQ 1.11 X[Y]和之間有什么區別merge(X, Y)?
X[Y] 是聯接,使用Y(或Y的鍵,如果有的話)作為索引查找X的行。
Y[X] 是一個聯接,使用X(或X的鍵,如果有的話)查找Y的行
merge(X,Y)同時執行兩種方式。X[Y]和的行數Y[X]通常不同,而merge(X,Y)和返回的行數merge(Y,X)相同。
但是錯過了要點。大多數任務需要在連接或合并后對數據執行某些操作。為什么合并所有數據列,然后只使用它們的一小部分?您可能會建議 merge(X[,ColsNeeded1],Y[,ColsNeeded2]),但這要求程序員確定需要哪些列。X[Y,jdata.table中的]為您完成所有這些工作。在編寫時X[Y,sum(foo*bar)],data.table會自動檢查j表達式以查看其使用的列。它只會將這些列作為子集;其他被忽略。僅為j使用的列創建內存,并且Y列在每個組的上下文中均享受標準的R回收規則。假設fooin中X,bar在中Y(以及中的20個其他列Y)。是不是X[Y,sum(foo*bar)] 比合并所有浪費的子集更快地編寫程序和更快地運行?
如果您想要左外連接 X[Y]
le <- Y[X]
mallx <- merge(X, Y, all.x = T)
# the column order is different so change to be the same as `merge`
setcolorder(le, names(mallx))
identical(le, mallx)
# [1] TRUE
如果要完全外部聯接
# the unique values for the keys over both data sets
unique_keys <- unique(c(X[,t], Y[,t]))
Y[X[J(unique_keys)]]
## t b a
## 1: 1 NA 1
## 2: 2 NA 4
## 3: 3 9 9
## 4: 4 16 16
## 5: 5 25 NA
## 6: 6 36 NA
# The following will give the same with the column order X,Y
X[Y[J(unique_keys)]]
- 3 回答
- 0 關注
- 602 瀏覽
添加回答
舉報