横持ちデータに変換するならreshapeよりdcast.data.table
かつて縦持ちデータ(long)を横持ちデータ(wide)に変換する際、reshapeが遅すぎて困っていたわけですが解決しました。
data.tableパッケージのdcast.data.tableを使えば10倍以上速くなります。
ただしCRANに上がっているパッケージではまだ実装されていないようなので注意。
以下はLahmanパッケージのBattingデータを用いた例。
# data.tableパッケージはCRANからではなくR-Forgeからインストールする #install.packages("data.table",repos="http://R-Forge.R-project.org", type="source") library(dplyr) library(data.table) library(reshape2) library(Lahman) dat <- Batting %.% group_by(playerID, yearID) %.% summarise(total = sum(G)) class(dat) #data.frameほかいくつかクラス属性を持っている #[1] "grouped_df" "tbl_df" "tbl" "data.frame" dat <- as.data.table(dat) # クラス属性にdata.tableも追加 class(dat) #[1] "grouped_df" "tbl_df" "tbl" "data.table" "data.frame" system.time(res1 <- reshape(dat, idvar="playerID", timevar="yearID", direction="wide")) # ユーザ システム 経過 # 8.233 1.190 25.247 system.time(res2 <- dcast.data.table(dat, playerID~yearID, fun=sum)) #Using 'total' as value column. Use 'value.var' to override # ユーザ システム 経過 # 0.477 0.045 1.647
参考記事
data.tableパッケージがreshape2パッケージの関数群を移植してるってことらしい。
http://stackoverflow.com/questions/6902087/proper-fastest-way-to-reshape-a-data-table