2012-10-17 11 views
6

Aşağıdaki veri çerçevesini vardır:Merging iki veri çerçeveleri

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

görüyorum yolu: Sonuçta

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,... 

, ben şöyle bir başkasıyla bu veri çerçevesini birleştirmek istiyorsanız Sonra

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,... 

sadece birleştirme işlev yardımıyla kullanabilirsiniz: o, şu biçime ilk veri çerçevesini değiştirmek zorunda kalacak iyon ve yıl ve ülke kullanarak onları (bire çok) birleştirin.

Veri çerçevesini yukarıda önerildiği gibi dönüştürmeye çalıştım. Bununla birlikte, düşünebilmemin tek yolu, birkaç karmaşık "for" döngüsünü kullanmaktır. Birisi daha kolay bir yaklaşıma sahip olsaydı büyük takdir olurdu. Ayrıca, bu iki veri çerçevesinin birleştirilmesinin daha da kolay bir şekilde yapılabileceğini düşünüyorsanız.

+0

Yeniden biçimlendirme işlevinin veya yeniden paketleme paketinin bunu yapacağını düşünüyorum. –

cevap

5

İlk veri çerçevesini eritmeniz gerekiyor.

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

Diğer sütunlarınızı eşleştirmek için yeni sütunları yeniden adlandırın. çok daha sezgisel kaynaşmaktansa davranır, çünkü

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

Ben işlevini katılmak tercih:

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

ya da (plyr paketini kullanarak veya katılmadan tercih edebilirsiniz)

Sonra birleştirme Özellikle NA değerlerinin olduğu durumlarda.

+0

Çok teşekkürler! Tam olarak ihtiyacım olan şey bu! – rp1

+0

Bu, baz paketini r'de kullanarak mümkün mü? – AngryPanda