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

如何在R中为栅格堆栈拟合62天周期的时间序列移动平均

问题原因

focal()函数默认针对栅格的空间邻域做运算,无法处理栅格堆栈的时间维度滑动计算,因此不符合你的需求。

可用解决方案

方法1:使用greenbrown包自带的SlideFUN函数(适配你当前的加载包环境)

SlideFUN是greenbrown包专门为栅格时间序列设计的滑动计算函数,直接指定窗口参数即可:

library(greenbrown)
library(raster)
data("ndvimap")

# w参数设置为你需要的窗口长度62
filt <- SlideFUN(ndvimap, FUN = mean, w = 62, na.rm = TRUE)

参数说明:

  • w:滑动窗口的时间步长,直接填你需要的62即可
  • 如果你的栅格总层数刚好是62,该运算等价于每个像素的全时间序列均值,输出为单波段栅格
  • 如果需要非中心对齐的滑动窗口,可添加align = "left"/align = "right"参数

方法2:使用terra包实现(运算效率更高,适配大栅格数据)

如果你的数据量较大,推荐用terra包处理,性能远高于raster包:

library(terra)
# 将栅格堆栈转为terra支持的SpatRaster格式
ndvi_terra <- rast(ndvimap)

# 自定义62天滑动平均函数
roll_mean_62 <- function(x, na.rm = TRUE) {
  n <- length(x)
  # 中心滑动窗口逻辑,可根据需求调整起止位置
  sapply(1:n, function(i) {
    win_start <- max(1, i - 31)
    win_end <- min(n, i + 31)
    mean(x[win_start:win_end], na.rm = na.rm)
  })
}

# 对每个像素的时间序列应用滑动平均
filt_terra <- app(ndvi_terra, roll_mean_62)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:51:02