私は最近data.tableパッケージを発見しました。私のプライベートコードの一部を置き換えるべきかどうか疑問に思っていました。要約すると、私は本当にplyrが好きで、基本的に私が望むすべてを達成しました。しかし、私のコードはしばらく時間がかかり、いくつかのテストを実行するにはスピードアップの見通しが十分でした。これらのテストはすぐに終了し、ここに理由があります。データで動作するようには思えない日付フォーマットでカラムを使用して、しかしdata.tableパッケージで日付を使用する
library(plyr)
DF <- data.frame(Date=rep(c(Sys.time(), Sys.time() + 60), each=6), y=c(rnorm(6, 1), rnorm(6, -1)))
#Split up data and apply arbitrary function
ddply(DF, .(Date), function(df){mean(df$y) - df[nrow(df), "y"]})
:
私はplyrでかなり頻繁にやっていることはいくつかの計算を日付を含む列で自分のデータを分割して行うことです.table:
library(data.table)
DT <- data.table(Date=rep(c(Sys.time(), Sys.time() + 60), each=6), y=c(rnorm(6, 1), rnorm(6, -1)))
setkey(DT, Date)
#Error in setkey(DT, Date) : Column 'Date' cannot be auto converted to integer without losing information.
私が正しくパッケージを理解していれば、私はsetkey()を使うとかなり高速化されます。また、Dateと数値の間を絶えず変換するのは良いコーディングではないと思います。だから私は何かを逃しているか、それともdata.tableでそれを達成するための簡単な方法はありませんか?
これは動作するはずsessionInfo()
R version 2.13.1 (2011-07-08)
Platform: x86_64-pc-mingw32/x64 (64-bit)
locale:
[1] C
attached base packages:
[1] grid stats graphics grDevices utils datasets methods base
other attached packages:
[1] data.table_1.6.3 zoo_1.7-2 lubridate_0.2.5 ggplot2_0.8.9 proto_0.3-9.2 reshape_0.8.4
[7] reshape2_1.1 xtable_1.5-6 plyr_1.5.2
loaded via a namespace (and not attached):
[1] digest_0.5.0 lattice_0.19-30 stringr_0.5 tools_2.13.1
私はdata.tableを使用していませんが、Sys.time()は 'Date'ではなくPOSIXctのdatetime値を返します。特に、返される値(1970年1月1日以降に経過した秒数)は一般的に整数値ではないため、整数に変換すると情報が失われることがあります。 –
data.tableは'setkey'を使わなくても実行時間が大幅に改善されました – Andrie