R data.table滑动窗口

标签 r time-series data.table sliding-window

使用 data.table 包实现滑动窗口函数的最佳(最快)方法是什么?

我正在尝试计算滚动中位数,但每个日期有多行(由于两个额外因素),我认为这意味着 Zoo rollapply 函数不起作用。下面是一个使用简单 for 循环的示例:

library(data.table)
df <- data.frame(
  id=30000,
  date=rep(as.IDate(as.IDate("2012-01-01")+0:29, origin="1970-01-01"), each=1000),
  factor1=rep(1:5, each=200),
  factor2=1:5,
  value=rnorm(30, 100, 10)
)

dt = data.table(df)
setkeyv(dt, c("date", "factor1", "factor2"))

get_window <- function(date, factor1, factor2) {
  criteria <- data.table(
    date=as.IDate((date - 7):(date - 1), origin="1970-01-01"),
    factor1=as.integer(factor1),
    factor2=as.integer(factor2)
  )
  return(dt[criteria][, value])
}

output <- data.table(unique(dt[, list(date, factor1, factor2)]))[, window_median:=as.numeric(NA)]

for(i in nrow(output):1) {
  print(i)
  output[i, window_median:=median(get_window(date, factor1, factor2))]
}

最佳答案

data.table 目前没有任何滚动窗口的特殊功能。更多详细信息请参见我对另一个类似问题的回答:

Is there a fast way to run a rolling regression inside data.table?

滚动中位数很有趣。它需要一个专门的函数才能有效地完成(与之前评论中的链接相同):

Rolling median algorithm in C

相对于适当的专门的 rollingmedian 函数(R afaik 不可用),这里的问题和答案中的 data.table 解决方案都非常低效。 .

关于R data.table滑动窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11676476/

相关文章:

r - 在大型数据集上加速 st_crop(sf 包)的方法

r - 如何在 R 中的 ns() 中指定度数参数,以构造 5 度自然样条?

r - 使用 data.table 查找重叠间隔组

r - 使用 mutate 一次将函数应用于多个列

python - 统计间隔内的寄存器数量

r - 如何使用R中的vars包来预测多个时间序列?

r - 按因子填充序列

php - 检测时间序列中满足特定条件的连续项目

r - 如何加快 R data.table 中缺失的搜索过程

r - 涉及因子的数据表赋值