2011-07-15 18 views
63

मुझे पता है कि मैं plyr और उसके दोस्तों को डेटाफ्रेम, और merge को गठबंधन करने के लिए उपयोग कर सकता हूं, लेकिन अब तक मुझे नहीं पता कि 2 कॉलम के आधार पर एकाधिक कॉलम के साथ दो डेटाफ्रेम कैसे मर्ज करें?मैं दो कॉलम के आधार पर दो डेटा-फ्रेम कैसे जोड़ूं?

By default the data frames are merged on the columns with names they both have, 
but separate specifications of the columns can be given by by.x and by.y. 

यह स्पष्ट रूप से संकेत मिलता है कि merge एक से अधिक स्तंभ के आधार पर डेटा फ्रेम में मर्ज हो जाएगी:

+1

प्रदान किया गया उत्तर (http://stackoverflow.com/q/1299871/) केवल एक कॉलम ("ग्राहक आईडी") के आधार पर जुड़ रहा है, इसलिए मुझे नहीं लगता कि यह एक डुप्लिकेट है। क्या कोई इस सवाल को 'अनप्लगेट' कर सकता है? – Lennert

उत्तर

95

?merge पर प्रलेखन, जिसमें कहा गया है देखें। अंतिम उदाहरण दस्तावेज में दिए गए से:

x <- data.frame(k1=c(NA,NA,3,4,5), k2=c(1,NA,NA,4,5), data=1:5) 
y <- data.frame(k1=c(NA,2,NA,4,5), k2=c(NA,NA,3,4,5), data=1:5) 
merge(x, y, by=c("k1","k2")) # NA's match 

यह उदाहरण incomparables के उपयोग का प्रदर्शन करने के लिए था, लेकिन यह रूप में अच्छी तरह एकाधिक स्तंभों का उपयोग कर विलय को दिखाता है। आप और y में by.x और by.y का उपयोग करके अलग-अलग कॉलम भी निर्दिष्ट कर सकते हैं।

+2

@darkage यह प्रश्न विलय डेटा फ्रेम के साथ सौदा करता है। ऐसा लगता है कि आपके पास डेटा.tables हैं। पूरी तरह से अलग। मैं डेटा.table के लिए प्रलेखन पढ़ा होगा। – joran

36

उम्मीद है कि इससे मदद मिलती है;

df1 = data.frame(CustomerId=c(1:10), 
      Hobby = c(rep("sing", 4), rep("pingpong", 3), rep("hiking", 3)), 
      Product=c(rep("Toaster",3),rep("Phone", 2), rep("Radio",3), rep("Stereo", 2))) 

df2 = data.frame(CustomerId=c(2,4,6, 8, 10),State=c(rep("Alabama",2),rep("Ohio",1), rep("Cal", 2)), 
      like=c("sing", 'hiking', "pingpong", 'hiking', "sing")) 

df3 = merge(df1, df2, by.x=c("CustomerId", "Hobby"), by.y=c("CustomerId", "like")) 

मान लिया जाये कि df1$Hobby और df2$like एक ही बात मतलब है।

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