【发布时间】:2014-04-30 15:53:18
【问题描述】:
我有一组数据
d1 <- data.frame(
cat1 = sample(c('a', 'b', 'c'), 100, replace = TRUE),
date = rep(Sys.Date() - sample(1:100)),
val = rnorm(100, 50, 5)
)
require(data.table)
d2 <- data.table(d1)
我可以毫无问题地获得每日总和
d2[ , list(.N, sum(val)), by = c("cat1", "date")]
我想在 2 天(然后是 7 天)内获得一笔款项
这行得通:
d.list <- sort(unique(d2$date))
o.list <- list()
for(i in seq_along(d.list)){
o.list[[i]] <- d2[d2$date >= d.list[i] - 1 & d2$date <= d.list[i], list(.N, sum(val), max(date)), by = c("cat1")]
}
do.call(rbind, o.list)
但是在更大的数据集上会变慢,而且似乎不是 data.table 的最佳用途。
有没有更有效的方法?
【问题讨论】:
-
首先,您需要
N列做什么?对于每日总和,只需执行d2 <- setDT(d1)[ , sum(val), by = c("cat1", "date")]
标签: r data.table