ワイド フォーマットからロング フォーマットへのパネル データセットの変換に苦労しています。データセットは次のようになります。
ID | KP1_430a | KP1_430b | KP1_430c | KP2_430a | KP2_430b | KP2_430c | KP1_1500a | ...
1 ....
2 ....
KP1; KP2 から KP7 まではウェーブを表します。a、b から f までは、特定のアイテムを表します。(例: パーティー a の左から右への配置)
このデータを長い形式で保持したいと考えています。このような:
ID | Party | Wave | 430 | 1500
1 1 1 .. ..
1 2 1 .. ..
. . .
1 1 2 .. ..
. . .
2 1 1 .. ..
リシェイプ機能を使ってみました。しかし、私は時間の経過とともにそれを再形成するのに問題を抱えていました.
これは小さな data.frame の例です。
data <- data.frame(matrix(rnorm(10),2,10))
data[,1] <- 1:2
names(data) <- c("ID","KP1_430a" , "KP1_430b" , "KP1_430c" , "KP2_430a" , "KP2_430b ", "KP2_430c ", "KP1_1500a" ,"KP1_1500b", "KP1_1500c")
そして、これが私が到達した距離です。
data_long <- reshape(data,varying=list(names(data)[2:4],names(data)[5:7], names(data[8:10]),
v.names=c("KP1_430","KP2_430","KP1_1500"),
direction="long", timevar="Party")
問題は残ります: 時変変数を長い形式で取得するにはどうすればよいですか? そして、このデータを再形成するよりエレガントな方法はありますか? 上記のコードでは、各波と変数の名前 (names(data)[2:4]) を入力する必要があります。この小さな data.frame で問題ありませんが、データセットはかなり大きくなります。
EDIT:この変換を手動で行う方法:私は実際にこれを行ったので、ページ長のコードファイルが残ります。
まず、KP1_430a と KP1_1500a を ID、Time=1、Party=1 の列ごとにバインドします。次に、すべてのパーティ [bf] に対して同じオブジェクトを作成し、パーティ インデックスをそれぞれ変更して、行ごとに追加します。残りのウェーブ [2-7] に対してステップ 1 と 2 を実行し、それぞれパーティと時間変数を変更して、行ごとに追加します。