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