【发布时间】:2013-05-11 06:52:02
【问题描述】:
我有一个 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 语法。
【问题讨论】:
-
查看 data.table 的 .SD 参数
标签: r data.table plyr