3 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
引用data.table FAQ 1.11 X[Y]和之間有什么區(qū)別merge(X, Y)?
X[Y] 是聯(lián)接,使用Y(或Y的鍵,如果有的話)作為索引查找X的行。
Y[X] 是一個(gè)聯(lián)接,使用X(或X的鍵,如果有的話)查找Y的行
merge(X,Y)同時(shí)執(zhí)行兩種方式。X[Y]和的行數(shù)Y[X]通常不同,而merge(X,Y)和返回的行數(shù)merge(Y,X)相同。
但是錯(cuò)過了要點(diǎn)。大多數(shù)任務(wù)需要在連接或合并后對(duì)數(shù)據(jù)執(zhí)行某些操作。為什么合并所有數(shù)據(jù)列,然后只使用它們的一小部分?您可能會(huì)建議 merge(X[,ColsNeeded1],Y[,ColsNeeded2]),但這要求程序員確定需要哪些列。X[Y,jdata.table中的]為您完成所有這些工作。在編寫時(shí)X[Y,sum(foo*bar)],data.table會(huì)自動(dòng)檢查j表達(dá)式以查看其使用的列。它只會(huì)將這些列作為子集;其他被忽略。僅為j使用的列創(chuàng)建內(nèi)存,并且Y列在每個(gè)組的上下文中均享受標(biāo)準(zhǔn)的R回收規(guī)則。假設(shè)fooin中X,bar在中Y(以及中的20個(gè)其他列Y)。是不是X[Y,sum(foo*bar)] 比合并所有浪費(fèi)的子集更快地編寫程序和更快地運(yùn)行?
如果您想要左外連接 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
如果要完全外部聯(lián)接
# 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)]]

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊
作為MNEL說,左/右外連接是通過交換獲得Y和X:Y[X]航班嗎X[Y]。因此,該語法支持4種連接類型中的3種,而不是2種iiuc。
添加第四似乎是個(gè)好主意。假設(shè)我們添加full=TRUE或both=TRUE或merge=TRUE(不確定最佳的參數(shù)名稱?),那么X[Y,j,merge=TRUE]在FAQ 1.12中BUT之后的原因?qū)ξ襾碚f是沒有用的?,F(xiàn)在已添加了新功能請(qǐng)求,并已鏈接回這里,謝謝:
FR#2301:像merge()一樣,為X [Y]和Y [X]聯(lián)接添加merge = TRUE參數(shù)。
最近的版本已經(jīng)加快了速度merge.data.table(例如,通過在內(nèi)部進(jìn)行淺表復(fù)制來更有效地設(shè)置密鑰)。因此,我們正試圖把merge()和X[Y]密切,并提供給用戶的所有選項(xiàng)充分的靈活性。兩者都有優(yōu)點(diǎn)和缺點(diǎn)。另一個(gè)出色的功能要求是:
FR#2033:將by.x和by.y添加到merge.data.table
如果還有其他人,請(qǐng)讓他們繼續(xù)前來。
通過問題的這一部分:
為什么不對(duì)聯(lián)接使用合并語法,而不是對(duì)match函數(shù)的nomatch參數(shù)使用?
如果你喜歡merge()的語法和它的3個(gè)參數(shù)all,all.x并且all.y然后就用這個(gè)來代替X[Y]。認(rèn)為它應(yīng)該涵蓋所有情況。還是您的意思是為什么論點(diǎn)是單一nomatch的[.data.table?如果是這樣的話,這對(duì)于FAQ 2.14來說似乎就是自然的方式:“您能進(jìn)一步解釋一下為什么data.table受到base中A [B]語法的啟發(fā)嗎?”。而且,nomatch當(dāng)前0和僅接受兩個(gè)值NA??梢詳U(kuò)展該值,例如,負(fù)值表示某種含義,或者12表示使用第12行的值來填充NA,或者nomatch將來可能是向量,甚至可能是本身data.table。
嗯 怎么會(huì)通過,而無需按與合并交互= TRUE?也許我們應(yīng)該把它交給datatable-help。
- 3 回答
- 0 關(guān)注
- 547 瀏覽
添加回答
舉報(bào)