複数のメジャー変数を持っていく場合に、データをロング フォーマットからワイド フォーマットに切り替える最もエレガントで柔軟な方法を見つけるのに苦労しています。
たとえば、これは長い形式の単純なデータ フレームです。 ID
は対象、TIME
は時間変数、 およびX
はat でY
作成された測定値です。ID
TIME
> my.df <- data.frame(ID=rep(c("A","B","C"), 5), TIME=rep(1:5, each=3), X=1:15, Y=16:30)
> my.df
ID TIME X Y
1 A 1 1 16
2 B 1 2 17
3 C 1 3 18
4 A 2 4 19
5 B 2 5 20
6 C 2 6 21
7 A 3 7 22
8 B 3 8 23
9 C 3 9 24
10 A 4 10 25
11 B 4 11 26
12 C 4 12 27
13 A 5 13 28
14 B 5 14 29
15 C 5 15 30
TIME
の値をinclude を含む列ヘッダーに変換したいだけの場合、パッケージ (または)からX
使用できることがわかっています。cast()
reshape
dcast()
reshape2
> cast(my.df, ID ~ TIME, value="X")
ID 1 2 3 4 5
1 A 1 4 7 10 13
2 B 2 5 8 11 14
3 C 3 6 9 12 15
しかし、私が実際にやりたいことはY
、別のメジャー変数として持ち込んで、列名にメジャー変数名と時間値の両方を反映させることです。
ID X_1 X_2 X_3 X_4 X_5 Y_1 Y_2 Y_3 Y_4 Y_5
1 A 1 4 7 10 13 16 19 22 25 28
2 B 2 5 8 11 14 17 20 23 26 29
3 C 3 6 9 12 15 18 21 24 27 30
X
(FWIW、すべての's の後に最初に 's が続くかどうか、またはそれらが, , ,などY
のようにインターリーブされるかどうかはあまり気にしません。)X_1
Y_1
X_2
Y_2
長いデータを 2 回キャストして結果をマージすることでこれに近づけることができますが、列名には多少の作業が必要であり、 and に加えて 3 番目または 4 番目の変数を追加する必要がある場合は微調整する必要がありX
ますY
。
merge(
cast(my.df, ID ~ TIME, value="X"),
cast(my.df, ID ~ TIME, value="Y"),
by="ID", suffixes=c("_X","_Y")
)
reshape2
and/orの関数のいくつかの組み合わせは、plyr
複数のメジャー変数をよりきれいに処理するだけでなく、私の試みよりもエレガントにこれを行うことができるはずです。のようなものcast(my.df, ID ~ TIME, value=c("X","Y"))
で、有効ではありません。しかし、私はそれを理解することができませんでした。