2015-06-18 21 views
5

में दूसरे डीटी से केवल एक कॉलम का उपयोग करें इसे क्लीनर बनाने के लिए संपादित करें। मान लें कि मेरे पास दो डेटा टेबल (डीटी 1 और डीटी 2) हैं, और मैं डेटा टेबल का उपयोग करके डीटी 3 प्राप्त करना चाहता हूं। ए, बी, सी, ई, एफ, जी, एच कॉलम नाम हैं। डीटी 1 कुंजी कॉलम ए है, और डीटी 2 कुंजी कॉलम ई है। डेटा टेबल में पंक्तियों की अलग-अलग संख्या होती है। मैं सभी कॉलम डीटी 1 से रखना चाहता हूं, और डीटी 2 से केवल एक कॉलम (एच) को शामिल डेटा तालिका में जोड़ना चाहता हूं। आखिरकार, मैं इसे डीटी 1 के रूप में स्टोर करूंगा (हालांकि मैंने इसे नीचे डीटी 3 के रूप में दिखाया है)।दो डेटा टेबल में शामिल हों और आर

मैं इसे डेटा टेबल के साथ कैसे प्राप्त कर सकता हूं? मेरे पास विलय + डेटा फ्रेम के साथ एक बदसूरत समाधान है।

dt1 
A B C 
1 4 7 
2 5 8 
3 6 9 
2 20 21 

dt2 
E F G H 
1 10 13 16 
3 12 15 18  
2 11 14 17 


dt3 
A B C H 
1 4 7 16 
2 5 8 17 
3 6 9 18 
2 20 21 17   
+2

आप एक क्या करना चाहते हैं बाएं 'dt1' में शामिल हों और इसमें एक नया कॉलम जोड़ें या आप बस एक बाहरी शामिल होना चाहते हैं एक नया डेटा सेट बनाओ? यदि पहला विकल्प आप जो खोज रहे हैं, तो 'setkey (setDT (dt1), ए) आज़माएं; डीटी 1 [डीटी 2, एच: = i.H] ' –

+0

मैंने अपने प्रश्न को स्पष्ट करने की कोशिश की। मैं डीटी 1 से सभी पंक्तियों और कॉलम रखना चाहता हूं। मैं बस डीटी 2 से एक कॉलम जोड़ना चाहता हूँ। धन्यवाद – user2649059

+0

तो फिर आपने 'df3' क्यों बनाया? इसके अलावा, क्या मेरा समाधान आपके लिए काम नहीं करता? यह वही करना चाहिए जो आपको चाहिए। –

उत्तर

13

का प्रयोग करेंगे आदेश में एक छोड़ दिया df1 को में शामिल होने और df2 से H स्तंभ जोड़ने के प्रदर्शन करने के लिए, आप को जोड़ सकते हैं द्विआधारी में शामिल होने के संदर्भ ऑपरेटर द्वारा अद्यतन (:=)

setkey(setDT(dt1), A) 
dt1[dt2, H := i.H] 

यह कैसे काम करता


devel संस्करण (v> = 1.9.5) के साथ पर विस्तृत विवरण के लिए here और here देखें हम setDT भीतर key निर्दिष्ट करने (के रूप में द्वारा बताया द्वारा यह भी कम कर सकता है @Arun)

setDT(dt1, key = "A")[dt2, H := i.H] 

संपादित 24/7/2015

अब आप एक द्विआधारी चला सकते हैं कुंजी

setDT(dt1)[dt2, H := i.H, on = c(A = "E")] 
-3

वे एक ही लंबाई के दोनों कर रहे हैं मैं

df3<-cbind(df1,df2[,4]) 
4

data.table समाधान

setDT(dt1)[ , H := dt2$H[match(dt1$A , dt2$E)] , ] 

# A B C H 
# 1: 1 4 7 16 
# 2: 2 5 8 17 
# 3: 3 6 9 18 
# 4: 2 20 21 17 

की स्थापना के बिना नई on पैरामीटर का उपयोग करने में शामिल होने के लिए एक और dplyr समाधान हो जाएगा

left_join(x = dt1 , y = dt2 , by = c("A" = "E")) %>% 
select(one_of(c("A" , "B" , "C" , "H"))) 
संबंधित मुद्दे