2012-10-17 42 views
6

Tôi có khung dữ liệu sau:sáp nhập hai dữ liệu

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

Cuối cùng, tôi muốn kết hợp khung dữ liệu này với nhau trông như thế này:

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

Con đường tôi nhìn thấy nó, tôi sẽ phải thay đổi khung dữ liệu đầu tiên theo định dạng sau:

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

Sau đó, tôi chỉ có thể sử dụng dấu ngắt hợp nhất ion và hợp nhất chúng (một-nhiều) bằng Năm và Quốc gia.

Tôi đã cố gắng chuyển đổi khung dữ liệu như đề xuất ở trên. Tuy nhiên, cách duy nhất tôi có thể nghĩ đến là sử dụng một vài "vòng lặp" phức tạp. Nó sẽ được đánh giá cao nếu ai đó có một cách tiếp cận dễ dàng hơn. Ngoài ra, nếu bạn nghĩ rằng việc kết hợp hai khung dữ liệu đó có thể được thực hiện theo cách dễ dàng hơn cũng sẽ tuyệt vời.

+0

Tôi nghĩ chức năng định hình lại hoặc gói reshape2 sẽ thực hiện việc này. –

Trả lời

5

Khung dữ liệu đầu tiên bạn cần làm tan chảy.

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

Đổi tên các cột mới để phù hợp với dữ liệu khác của bạn.frame.

Sau đó merge (hoặc bạn có thể muốn tham gia, sử dụng các gói plyr)

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

hay:

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

tôi thích chức năng tham gia, bởi vì nó hoạt động nhiều bằng trực giác hơn sáp nhập, đặc biệt là trong trường hợp có các giá trị NA.

+0

Cảm ơn rất nhiều! Đó chính xác là những gì tôi cần! – rp1

+0

Điều này có thể sử dụng gói cơ sở trong r? – AngryPanda

Các vấn đề liên quan