我有一个 130 万行数据框,我需要将其汇总为区域和时间摘要。Plyr
的语法很简单,但它太慢了,不实用(我已经ddply
跑了一个小时,它完成了不到 25%)。我正在寻求帮助将ddply
语法翻译成data.table
利用其吹嘘的速度。
我的数据属于以下类型
library(plyr)
library(lubridate)
dat <- expand.grid(area = letters[1:2],
day = as.Date("2012-10-01") + c(0:10) * days(1),
type = paste("t", 1:2, sep=""))
dat$val <- runif(44)
我需要行数(考虑到我的玩具数据,这里将是相等的)和val
不同时期的变量总和。
这个ddply
电话给了我我正在寻找的东西
count.and.sum <- function(i){
if(i$day >= as.Date("2012-10-02")){
k <- data.frame(c_1d = nrow(dat[dat$type == i$type &
dat$area == i$area &
dat$day %in% i$day - days(1),]),
c_2d = nrow(dat[dat$type == i$type &
dat$area == i$area &
dat$day %in% (i$day - c(1:2) * days(1)),]),
s_1d = sum(dat$val[dat$type == i$type &
dat$area == i$area &
dat$day %in% i$day - days(1)]),
s_2d = sum(dat$val[dat$type == i$type &
dat$area == i$area &
dat$day %in% (i$day - c(1:2) * days(1))]))
return(k)
}
}
ddply(dat, .(area, day, type), count.and.sum)[1:10,]
非常感谢data.table
您可以提供的任何语法。