1

特定の基準に基づいてデータセットを再形成して時間単位で配置する方法について、正しい方向に導いていただけないでしょうか。たとえば、次の例のデータセットがあります。 データフレーム

データセットを次のように再形成しようとしています。

ここに画像の説明を入力してください

どうすればこの再形成を進めることができますか?どうもありがとう。

My sample data:

data = structure(list(date = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L), .Label = "Jan-97", class = "factor"), day = c(1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L), hour = c(1L, 2L, 
3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), Value = c(65L, 29L, 
31L, 42L, 42L, 52L, 61L, 57L, 55L, 52L, 57L, 46L)), .Names = c("date", 
"day", "hour", "Value"), class = "data.frame", row.names = c(NA, 
-12L))
4

4 に答える 4

5

これはreshape2パッケージを使用します。reshape関数で実行できると確信していますが、それほど簡単ではありません。

library("reshape2")
dcast(data, date+day~hour, value.var="Value")

を与える

> dcast(data, date+day~hour, value.var="Value")
    date day  1  2  3  4
1 Jan-97   1 65 29 31 42
2 Jan-97   2 42 52 61 57
3 Jan-97   3 55 52 57 46

その名前が気に入らない場合は、後で変更できます。

widedata <- dcast(data, date+day~hour, value.var="Value")
names(widedata)[-(1:2)] <- paste0("hour",names(widedata[-(1:2)]))

そうwidedataです:

> widedata
    date day hour1 hour2 hour3 hour4
1 Jan-97   1    65    29    31    42
2 Jan-97   2    42    52    61    57
3 Jan-97   3    55    52    57    46
于 2012-04-12T19:50:43.997 に答える
3

これは、を使用して解決できますreshape

reshape(data, idvar=c('date','day'), direction='wide', timevar='hour')
于 2012-04-12T19:52:08.893 に答える
3

これはベースでそれを行う方法です:

reshape(data, timevar = c("hour"), v.names = c("Value"),  
    idvar = c("date", "day"), direction = "wide")

編集:名前を保持したい場合にブライアンが使用したように:

names(DF)[-c(1:2)] <- paste0("hour", 1:4)
rownames(DF)<- 1:nrow(DF)
DF

収量:

    date day hour1 hour2 hour3 hour4
1 Jan-97   1    65    29    31    42
2 Jan-97   2    42    52    61    57
3 Jan-97   3    55    52    57    46
于 2012-04-12T19:53:50.467 に答える