2012-10-17 31 views
6

मैं निम्नलिखित डेटा फ्रेम है:विलय दो डेटा फ्रेम

Year,Country,Exp,... 
1969,Austria,1,... 
1970,Austria,0,... 
1969,Germany,0,... 
1970,Germany,1,... 

तरह से मैं देख रहा हूँ:

Date,Year,Austria,Germany,... 
1969-12-31,1969,96.743,95.768,... 
1970-01-30,1970,95.515,95.091,... 
1970-02-27,1970,95.075,95.235,... 

अंत में, मैं एक और एक है कि इस तरह दिखता है के साथ इस डेटा फ्रेम मर्ज करना चाहते हैं इसे, मुझे पहले प्रारूप में निम्नलिखित डेटा फ्रेम को बदलना होगा:

Date,Year,Country,Exp,… 
1969-12-31,1969,Austria,96.743,... 
1970-01-30,1970,Austria,95.515,... 
1970-02-27,1970,Austria,95.075,... 
1969-12-31,1969,Germany,95.768,... 
1970-01-30,1970,Germany,95.091,... 
1970-02-27,1970,Germany,95.235,... 

फिर, मैं बस मर्ज फ़ंक्शन का उपयोग कर सकता हूं आयन और वर्ष और देश का उपयोग करके उन्हें (एक से कई) मर्ज करें।

मैंने ऊपर दिए गए सुझाव के रूप में डेटा फ्रेम को बदलने की कोशिश की है। हालांकि, एकमात्र तरीका मैं सोच सकता हूं कि कुछ जटिल "फॉर" लूप का उपयोग करना है। अगर किसी के पास आसान दृष्टिकोण होता तो इसकी बहुत सराहना की जाएगी। इसके अलावा, अगर आपको लगता है कि उन दो डेटा फ्रेमों को विलय करना एक आसान फैशन में किया जा सकता है जो कि बहुत अच्छा होगा।

+0

मुझे लगता है कि reshape फ़ंक्शन या reshape2 पैकेज यह करेगा। –

उत्तर

5

पहले डेटा फ्रेम को पिघलने की आवश्यकता है।

library(reshape) 
melt(dat, id.vars="Date,Year") # may need to add ...,c()) 

अपने अन्य डेटा से मेल खाने के लिए नए कॉलम का नाम बदलें। फ्रेम। ,,

library(plyr) 
join(dat,dat2, by=c("Date","Country")) 

मैं समारोह में शामिल होने के पसंद करते हैं क्योंकि यह विलय की तुलना में अधिक सहज कार्य करता है:

फिर विलय (या शामिल होने के लिए पसंद कर सकते हैं, plyr पैकेज का उपयोग)

merge(dat,dat2, by=c("Date","Country")) 

या खासकर उस मामले में जहां एनए मूल्य हैं।

+0

बहुत बहुत धन्यवाद! यही वही है जो मुझे चाहिए! – rp1

+0

क्या आर में मूल पैकेज का उपयोग करना संभव है? – AngryPanda

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