130 万行のデータ フレームがあり、これを地域的および一時的な要約に集約する必要があります。Plyr
の構文は簡単ですが、実際には遅すぎます (1ddply
時間実行して、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
あなたが提供できる構文を本当に感謝します。