繁体   English   中英

如何在 data.table 中迭代

[英]How to iterate within a data.table

我想计算分组和累积的统计数据,例如下面的模拟,其中我每天有 10 次观察,持续 5 天,我计算每天的累积标准偏差。

library(data.table)
library(tictoc)

DURATION <- 5
DAILY_N <- 10
N_PER_COND <- DURATION * DAILY_N

dt <- 
    data.table(
      day = rep(1:DURATION, each = DAILY_N),
      x = rgamma(n=N_PER_COND, shape=5, scale=25)
    )

cum_stdevs <- vector('double', DURATION)

tic()
for (i in seq_along(cum_stdevs)) {
    cum_x <- dt[day <= i, x]
    cum_stdevs[i] <- sd(cum_x)
}
toc()

有没有办法在 data.table 中执行这种操作而不使用 for 循环?

即使在 for 循环中,速度也比使用标准数据帧提高了 14 倍。

我想你可以在data.table中尝试sapply ,如下所示

cum_stdevs <- dt[, sapply(seq_along(cum_stdevs), function(k) sd(x[day <= k]))]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM