reshape関数の挙動

reshape関数の挙動にはいつも悩まされるのでメモ。
wide形式に変換した時にtimevarに指定した変数の並び順がそのまま反映されるので、事前に並び替えておくことが必要。

> index <- seq(1,10)
> time  <- rep(c(4,2,5,3,1), 2)
> value <- seq(11,20)
> 
> test <- data.frame(index, time, value)
> 
> reshape(test, idvar="index", timevar="time", direction="wide")
   index value.4 value.2 value.5 value.3 value.1
1      1      11      NA      NA      NA      NA
2      2      NA      12      NA      NA      NA
3      3      NA      NA      13      NA      NA
4      4      NA      NA      NA      14      NA
5      5      NA      NA      NA      NA      15
6      6      16      NA      NA      NA      NA
7      7      NA      17      NA      NA      NA
8      8      NA      NA      18      NA      NA
9      9      NA      NA      NA      19      NA
10    10      NA      NA      NA      NA      20
> 
> test <- test[order(test$time), ]
> reshape(test, idvar="index", timevar="time", direction="wide")
   index value.1 value.2 value.3 value.4 value.5
5      5      15      NA      NA      NA      NA
10    10      20      NA      NA      NA      NA
2      2      NA      12      NA      NA      NA
7      7      NA      17      NA      NA      NA
4      4      NA      NA      14      NA      NA
9      9      NA      NA      19      NA      NA
1      1      NA      NA      NA      11      NA
6      6      NA      NA      NA      16      NA
3      3      NA      NA      NA      NA      13
8      8      NA      NA      NA      NA      18