2012-10-17 27 views
6

Mam następujący ramkę danych:połączenia dwóch dane ramek

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

Docelowo chciałbym połączyć tę ramkę danych z innym, który wygląda tak:

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

Ja widzę to, że będę musiał zmienić pierwszą ramkę danych w następującej formie:

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

Następnie można po prostu użyć FUNCT scalania i łączenie ich (jeden do wielu) za pomocą roku i kraju.

Próbowałem przekształcić ramkę danych zgodnie z powyższym opisem. Jednak jedyny sposób, jaki mogę wymyślić, to użycie kilku skomplikowanych pętli "dla". Byłoby bardzo cenne, gdyby ktoś miał łatwiejsze podejście. Ponadto, jeśli myślisz, że scalenie tych dwóch ramek danych może być wykonane w łatwiejszy sposób, który również byłby świetny.

+0

Myślę, że funkcja przekształcania lub pakiet reshape2 zrobi to. –

Odpowiedz

5

Pierwsza ramka danych, którą trzeba stopić.

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

Zmień nazwę nowej kolumny, aby dopasować swoje inne data.frame.

następnie scalić (lub może wolisz dołączyć, korzystając z pakietu plyr)

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

czyli

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

Wolę funkcję dołączyć, ponieważ działa znacznie bardziej intuicyjnie niż łączyć, szczególnie w przypadku, gdy istnieją wartości NA.

+0

Wielkie dzięki! Dokładnie tego potrzebowałem! – rp1

+0

Czy jest to możliwe przy użyciu pakietu podstawowego w r? – AngryPanda

Powiązane problemy