1

私には、理解できない一見単純な質問があります。各期間が観測用の独自の変数 (つまり、列) を持つデータセットを取得し、各観測が期間の範囲にある変数を 1 つだけ持つように再フォーマットしたいと考えています。私の現在のデータは次のようになります。

obs <- 1:4
y1 <- 5:8
y2 <- 9:12  
data_matrix <- cbind(obs, y1, y2)   

これは以下を生成します:

     obs y1 y2
[1,]   1  5  9
[2,]   2  6 10
[3,]   3  7 11
[4,]   4  8 12

そして、私はそれを次のようにしたいと思います(また、期間変数Tを作成します):

     obs  T y2
[1,]   1  1  5
[2,]   1  2  9
[3,]   2  1  6
[4,]   2  2 10
[5,]   3  1  7
[6,]   3  2 11
[7,]   4  1  8
[8,]   4  2 12

これを再形成する方法についてのアドバイスをありがとう。

4

2 に答える 2

1

問題の根本は、cbind()列を追加することであり、行と列の両方を結合しようとしています。これにアプローチするにはさまざまな方法がありますが、例が実際にこれほど単純な場合 (つまり、これらの数列のみ)、 を使用して 2 つのデータ フレームを作成しdata.frame()、それらを を使用して結合するのは簡単rbind()です。

> rbind(data.frame(obs,y2=y1,T=1),data.frame(obs,y2,T=2))
  obs y2 T
1   1  5 1
2   2  6 1
3   3  7 1
4   4  8 1
5   1  9 2
6   2 10 2
7   3 11 2
8   4 12 2
于 2013-06-04T20:49:05.873 に答える
1

データを再形成できます。

data_matrix<-data.frame(data_matrix)
reshape(data_matrix,varying=list(2:3),times=names(data_matrix)[2:3],idvar="obs",v.names="value",direction="long")

戻り値:

     obs time value
1.y1   1   y1     5
2.y1   2   y1     6
3.y1   3   y1     7
4.y1   4   y1     8
1.y2   1   y2     9
2.y2   2   y2    10
3.y2   3   y2    11
4.y2   4   y2    12

その後、obs で並べ替えることができます。

于 2013-06-04T21:08:46.670 に答える