我最近發現data.table包,現在想知道是否應該替換一些我的plyr代碼。總而言之,我非常喜歡plyr,而且我基本達到了我想要的一切。然而,我的代碼運行了一段時間,加快速度的前景足以讓我運行一些測試。那些測試很快就結束了,這就是原因。在data.table包中使用日期
我做了很多經常與plyr是包含日期一欄分割我的數據,並做一些計算:
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"]})
然而,使用與日期格式列似乎並不在數據工作.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()時只會獲得顯着的加速。另外,我認爲在日期和數字之間不斷進行轉換並不是很好的編碼。所以我錯過了什麼,或者有沒有簡單的方法來實現與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()返回'POSIXct'日期時間值,而不是'日期'。特別是,返回的值(自1970年1月1日以來經過的秒數)通常不是整數值,因此轉換爲整數將確實會丟失信息,因爲錯誤消息表示 –
請注意,data.table可以產生即使你不使用'setkey',執行時間也會有相當大的改善。 – Andrie