2013-04-16 12 views
7

यदि मैं सही ढंग से समझता हूं, डिफ़ॉल्ट रूप से data.table कुंजी के रूप में सेट किए गए कॉलम की तुलना करके दो तालिकाओं को विलय करता है और समान नाम हैं। यदि मेरे पास अलग-अलग कॉलम नामों के साथ तालिकाओं हैं तो मुझे कैसे लिखना चाहिए? उदाहरण के लिए:विभिन्न कॉलम नामों के साथ विलय सारणी

set.seed(123) 
DT1<-data.table(col1=sample(letters,5,replace=TRUE),col2=sample(LETTERS[1:5],5,replace=TRUE),col3=sample(1:2,5,replace=TRUE)) 
DT2<-data.table(col4=sample(1:3,10,replace=TRUE),col5=sample(LETTERS[1:5],10,replace=TRUE),col6=sample(1:100,10,replace=TRUE)) 
(DT1) 
(DT2) 

> (DT1) 
    col1 col2 col3 
1: h A 2 
2: u C 1 
3: k E 2 
4: w C 2 
5: y C 1 
> (DT2) 
    col4 col5 col6 
1: 3 D 48 
2: 1 C 76 
3: 1 C 22 
4: 1 B 32 
5: 3 A 24 
6: 3 E 15 
7: 3 E 42 
8: 2 D 42 
9: 3 D 37 
10: 2 A 16 

मैं DT1[ में क्या लिखना चाहिए col2 == col5 & col3 == col4 के साथ ही पंक्तियों का चयन किसी मर्ज बनाने के लिए?

col1 col2 col3 col4 col5 col6 
    h A 2 2 A 16 
    u C 1 1 C 76 
    u C 1 1 C 22 
    y C 1 1 C 76 
    y C 1 1 C 22 

अग्रिम धन्यवाद: यहाँ एक उम्मीद उत्पादन है!

+0

क्या आप हमें वह आउटपुट दिखा सकते हैं जिसकी आप उम्मीद कर रहे हैं? – Arun

+0

सुनिश्चित करें, बस एक दूसरा –

+0

मैं जोड़ूंगा कि यह समझने का प्रयास करने के लिए यह एक अच्छा सवाल है कि "गलत" कॉलम पर 'data.table' क्यों विलय हो गया है जब आपने चाबियाँ चुपचाप निर्दिष्ट नहीं की हैं। – MichaelChirico

उत्तर

21

का उपयोग data.table के आधार पर उप-समूह हाल ही में लागू on= तर्क और nomatch=0L के साथ जुड़ जाता है, यह बस है:

DT2[DT1, on=c(col5="col2", col4="col3"), nomatch=0L] 

अधिक के लिए secondary indices शब्दचित्र देखें।


वैकल्पिक रूप से, अगर आप data.tables keyed किया है, तो आप on= तर्क छोड़ सकते हैं। लेकिन ऊपर दिया गया समाधान मूर्खतापूर्ण होगा क्योंकि यह मूल डेटा.tables के क्रम को बरकरार रखता है, और यह स्पष्ट करना स्पष्ट है कि कोड को देखकर कॉलम को किस प्रकार देखा जा रहा है।

setkey(DT1, col2, col3) 
setkey(DT2, col5, col4) 
DT2[DT1, nomatch=0L] 

पुराने संस्करणों के लिए इतिहास देखें।

+0

बढ़िया! मुझे 'setkey' फ़ंक्शनिंग के इन विवरणों को नहीं पता था। आपका बहुत बहुत धन्यवाद! –

संबंधित मुद्दे