R 将日期与data.table包一起使用

R 将日期与data.table包一起使用,r,datetime,data.table,plyr,R,Datetime,Data.table,Plyr,我最近发现了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)

我最近发现了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"]})
这应该起作用:

DT <- data.table(Date=as.ITime(rep(c(Sys.time(), Sys.time() + 60), each=6)),
                 y=c(rnorm(6, 1), rnorm(6, -1)))
setkey(DT, Date)

DT我没有使用data.table,但请注意Sys.time()返回的是
POSIXct
datetime值,而不是
Date
。特别是,返回的值(自1970年1月1日以来经过的秒数)通常不是整数值,因此转换为整数确实会丢失信息,正如错误消息所说,注意data.table可以大大缩短执行时间,即使您不使用
setkey
谢谢,这很有帮助。实际上,我使用的是lubridate,这对ggplot2非常有效。由于所有三个软件包(lubridate、ggplot2、plyr)都来自同一位作者,并且结合使用效果非常好,因此我想我将继续使用它们,而不是进行切换。但是你的回答提供了一个很好的解决方法,当我有时间的时候,我想我会用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 
DT <- data.table(Date=as.ITime(rep(c(Sys.time(), Sys.time() + 60), each=6)),
                 y=c(rnorm(6, 1), rnorm(6, -1)))
setkey(DT, Date)