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

如何计算时间序列数据中Light变量不同时间周期的平均值

R语言实现小时级监测数据多时间窗口滑动均值计算

你需要的多窗口滑动均值可以通过tidyverse+lubridate+slider工具链实现,逻辑更直观,可灵活适配你的窗口定义需求,避免xts、timeAverage等工具默认聚合逻辑和需求不匹配的问题。

前置准备

先安装加载所需依赖包:

# 首次使用先执行安装
# install.packages(c("tidyverse", "lubridate", "slider"))
library(tidyverse)
library(lubridate)
library(slider)

步骤1:数据预处理

首先确保时间字段格式正确、数据按时间升序排列:

# 替换df为你的实际数据集名称
df_clean <- df %>%
  # 将Date列转换为标准时间格式
  mutate(Date = ymd_hms(Date)) %>%
  # 严格按时间升序排序,避免窗口计算错误
  arrange(Date)

步骤2:多窗口均值计算

根据你的数据是否为严格1小时间隔,选择对应计算方案:

方案A:数据为严格连续1小时间隔(无缺失小时点位)

基于行号计算,运行效率更高:

df_result <- df_clean %>%
  mutate(
    # 当日24小时均值:包含当前时间点往前共24个小时数据
    timeperiod_24h = slide_dbl(Light, mean, na.rm = TRUE, .before = 23, .complete = FALSE),
    # 5日均值:包含当日往前共5天数据
    timeperiod_5days = slide_dbl(Light, mean, na.rm = TRUE, .before = 119, .complete = FALSE),
    # 1周均值:包含当日往前共7天数据
    timeperiod_1week = slide_dbl(Light, mean, na.rm = TRUE, .before = 167, .complete = FALSE)
  )

方案B:数据存在缺失小时点位(非严格连续)

基于真实时间差计算,结果更准确,推荐优先使用:

df_result <- df_clean %>%
  mutate(
    # 当日24小时均值:当前时间点往前23小时内的所有数据均值
    timeperiod_24h = slide_index_dbl(
      Light, Date, mean, na.rm = TRUE,
      .before = hours(23), .complete = FALSE
    ),
    # 5日均值:当前时间点往前4天内的所有数据均值
    timeperiod_5days = slide_index_dbl(
      Light, Date, mean, na.rm = TRUE,
      .before = days(4), .complete = FALSE
    ),
    # 1周均值:当前时间点往前6天内的所有数据均值
    timeperiod_1week = slide_index_dbl(
      Light, Date, mean, na.rm = TRUE,
      .before = days(6), .complete = FALSE
    )
  )

参数调整说明

  • na.rm = TRUE:计算时自动跳过空值,若需空值存在时返回NA可删除该参数
  • .complete = TRUE:窗口长度不足时返回NA,比如前23小时的24小时均值会返回空,可按需开启
  • 输出的df_result已包含你需要的所有字段,可直接导出使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:24:06