分组多变量滚动平均计算:按londeg、latdeg分组求uw、vw的t-1~t-3滚动平均
解决方案
首先请确保你的数据集已经按dateday升序排列,否则滚动平均的时序计算会出错。你提供的样例数据所有行均为同一日期,实际运行时请使用包含多日时序的完整数据集,才能得到有效结果。
修改后的代码如下:
library(tidyverse) library(slider) # 排序保证时序正确 df_sorted <- df %>% arrange(latdeg, londeg, dateday) # 分组计算双变量滚动平均 df_result <- df_sorted %>% group_by(latdeg, londeg) %>% reframe( dateday = dateday, uw_day0 = uw, vw_day0 = vw, # 批量计算uw的t-1、t-2、t-3滚动平均 across(uw, .fns = map(1:3, ~\(x) slide_dbl(x, mean, .before = .x, .complete = FALSE)), .names = "uw_day{.fn}" ), # 批量计算vw的t-1、t-2、t-3滚动平均 across(vw, .fns = map(1:3, ~\(x) slide_dbl(x, mean, .before = .x, .complete = FALSE)), .names = "vw_day{.fn}" ) ) %>% ungroup()
核心修改说明
- 新增
group_by(latdeg, londeg)逻辑:所有滚动计算仅在同一个经纬度格点的时序数据内执行,不会跨格点混淆计算 - 用
across()函数同时处理uw和vw两个变量,批量生成对应滞后阶数的滚动平均列,自动按变量名_dayN规则命名 - 保留原代码的窗口规则:
.before = N代表计算包含当前行在内、往前共N+1天的平均值;如果你需要计算纯滞后(不含当前行的t-1到t-N均值),可以将slide_dbl的参数调整为.before = .x, .after = -1 .complete = FALSE保留原逻辑,数据量不足窗口大小时依然返回有效值,如需不足窗口时返回NA,可将该参数改为TRUE
内容的提问来源于stack exchange,提问作者Lee1010
相关产品推荐
相关产品推荐

