我最近发现了 data.table 包,现在想知道是否应该替换我的一些 plyr 代码。总而言之,我真的很喜欢plyr,并且我基本上实现了我想要的一切。然而,我的代码运行了一段时间,并且加快速度的前景足以让我运行一些测试。这些测试很快就结束了,原因如下。
我经常使用 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"]})
但是,使用日期格式的列似乎在 data.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