如何计算时间序列数据中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
相关产品推荐
相关产品推荐

