R でデータをワイド フォーマットからロング フォーマットに再形成しようとしています。ワイド フォームでは、列は日付であり、これらの日付を行に入れたいと考えています。私のデータは
structure(list(A = c(1L, 4L, 3L), B = structure(c(1L, 3L, 2L), .Label = c("Site1",
"Site2", "Site3"), class = "factor"), C = c(1L, 4L, 3L), D = c(7L,
5L, 1L), X4.5.2013 = c(4L, 6L, 8L), X7.5.2013 = c(2L, 5L, 7L),
X10.5.2013 = c(5L, 4L, 8L)), .Names = c("A", "B", "C", "D",
"X4.5.2013", "X7.5.2013", "X10.5.2013"), class = "data.frame", row.names = c(NA,
-3L))
このデータフレームを与える
A B C D X4.5.2013 X7.5.2013 X10.5.2013
1 1 Site1 1 7 4 2 5
2 4 Site3 4 5 6 5 4
3 3 Site2 3 1 8 7 8
ここでは、列は日付であるため、たとえば X4.5.2013 は 2013 年 4 月 5 日の日付に対応することに注意してください。これらのデータを次のように再形成したい
structure(list(A = c(1L, 1L, 1L, 4L, 4L, 4L, 3L, 3L, 3L), B = structure(c(1L,
1L, 1L, 3L, 3L, 3L, 2L, 2L, 2L), .Label = c("Site1", "Site2",
"Site3"), class = "factor"), C = c(1L, 1L, 1L, 4L, 4L, 4L, 3L,
3L, 3L), D = c(7L, 7L, 7L, 5L, 5L, 5L, 1L, 1L, 1L), Date = structure(c(2L,
3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L), .Label = c("10/5/2013", "4/5/2013",
"7/5/2013"), class = "factor"), E = c(4L, 2L, 5L, 6L, 5L, 4L,
8L, 7L, 8L)), .Names = c("A", "B", "C", "D", "Date", "E"), class = "data.frame", row.names = c(NA,
-9L))
また
A B C D Date E
1 1 Site1 1 7 4/5/2013 4
2 1 Site1 1 7 7/5/2013 2
3 1 Site1 1 7 10/5/2013 5
4 4 Site3 4 5 4/5/2013 6
5 4 Site3 4 5 7/5/2013 5
6 4 Site3 4 5 10/5/2013 4
7 3 Site2 3 1 4/5/2013 8
8 3 Site2 3 1 7/5/2013 7
9 3 Site2 3 1 10/5/2013 8
私はオンラインで読んでいて、「reshape」コマンドを使いたいようです。私はこれを試しました
reshape(df1, varying = list(c("X4.5.2013", "X7.5.2013", "X10.5.2013")),
idvar = "D", direction = "long")
その結果、
A B C D time X4.5.2013
7.1 1 Site1 1 7 1 4
5.1 4 Site3 4 5 1 6
1.1 3 Site2 3 1 1 8
7.2 1 Site1 1 7 2 2
5.2 4 Site3 4 5 2 5
1.2 3 Site2 3 1 2 7
7.3 1 Site1 1 7 3 5
5.3 4 Site3 4 5 3 4
1.3 3 Site2 3 1 3 8
これはある程度機能しているようですが、代わりにこれらの時間を元のデータフレームの列見出しの日付にしたい場合は、「時間」列が表示されます。この「時間」列の列見出しを使用する方法を知っている人はいますか?しかし、代わりに、この列を「日付」と呼び、列見出しを日付形式に変換します。
ありがとう!
編集:もう少し遊んだ後、私はそれを見つけました
reshape(df1, varying=list(c("X4.5.2013", "X7.5.2013", "X10.5.2013")), times=names(df1[5:7]), timevar = "Date", idvar="D", direction = "long")
結果は
A B C D Date X4.5.2013
7.X4.5.2013 1 Site1 1 7 X4.5.2013 4
5.X4.5.2013 4 Site3 4 5 X4.5.2013 6
1.X4.5.2013 3 Site2 3 1 X4.5.2013 8
7.X7.5.2013 1 Site1 1 7 X7.5.2013 2
5.X7.5.2013 4 Site3 4 5 X7.5.2013 5
1.X7.5.2013 3 Site2 3 1 X7.5.2013 7
7.X10.5.2013 1 Site1 1 7 X10.5.2013 5
5.X10.5.2013 4 Site3 4 5 X10.5.2013 4
1.X10.5.2013 3 Site2 3 1 X10.5.2013 8
これは私が望むものに非常に近いですが、まだ完全ではありません。ここに私がまだ持っている問題があります:
1) 最後の列の名前を「X4.5.2013」から「E」に変更するにはどうすればよいですか? 変形コマンドに方法はありますか、それとも変形後に別のコマンドでこれを行う必要がありますか? 2) この最後のデータフレームのインデックスが "7.X4.5.2013" の形式になっているのはなぜですか? (たとえば)