6

次のデータフレームがあります。

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

最終的に、このデータ フレームを次のような別のデータ フレームとマージしたいと思います。

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

私の見方では、最初のデータ フレームを次の形式に変更する必要があります。

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

次に、マージ関数を使用して、年と国を使用してそれらを (1 対多に) マージします。

上記のようにデータフレームを変換しようとしました。ただし、私が考えることができる唯一の方法は、いくつかの複雑な「for」ループを使用することです。誰かがより簡単なアプローチを持っていれば幸いです。また、これら 2 つのデータ フレームをより簡単にマージできると思われる場合は、それも素晴らしいことです。

4

1 に答える 1

5

融解する必要がある最初のデータ フレーム。

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

他の data.frame に一致するように新しい列の名前を変更します。

次にマージします (または、plyr パッケージを使用して結合することをお勧めします)。

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

また:

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

特に NA 値がある場合は、マージよりもはるかに直感的に機能するため、結合関数を好みます。

于 2012-10-17T19:43:42.433 に答える