You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于data.table优化风向时间序列滚动范围计算的高效方案问询

圆形风向数据的滚动窗口最大差值高效计算(基于data.table)

问题背景

处理多站点等间隔风向(1-360度)时间序列数据,作为质控流程的一环,需为每个观测值完成以下计算:

  • 以该观测值为中心的指定时间窗口(如3分钟)内,任意两个观测值的风向角度最大差值(范围)
  • 按站点单独执行计算

风向属于圆形数据,无法直接套用非圆形变量(如气温)的滚动窗口范围计算逻辑:

示例:vec <- c(1, 170, 300),直接计算max(vec) - min(vec)得到299,但正确的最大角度差应为169

两两风向的正确差值可通过以下函数计算:

diff_x_y <- function(x, y) 180 - abs(abs(y - x) - 180)

当前方案及痛点

  • 现有实现:按站点过滤数据,用outer函数生成所有观测值的两两差值矩阵,再遍历矩阵提取每个观测值对应窗口的最大值(循环+矩阵索引方式)
  • 性能瓶颈:15个站点、36小时数据,计算1/10/60分钟窗口耗时约11.47秒,效率低下,无法适配未来实时自动化场景
  • 无效尝试:通过生成lead/lag列计算当前值与偏移值的差值,再取行最大值,但滚动窗口会引入无关观测值,导致结果错误

需求

寻求基于data.table包的更高效实现方案。

内容的提问来源于stack exchange,提问作者Marvin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 18:19:52