使用rollmean计算滚动均值时如何用原始值填充生成的NA
滚动均值前导NA填充原始值方案
滚动均值计算时前k-1项返回NA是滑动窗口观测数不足导致的,可通过以下几种方式用原始值填充缺失位,避免数据点丢失,以下以窗口大小k=3为例演示:
方案1:直接用对应位置原始值替换NA
如果不需要对前几项做均值计算,直接保留原始观测值即可:
# 加载依赖包 library(zoo) library(dplyr) # 构造测试数据 x <- c(1, 3, 5, 7, 9, 11) k <- 3 # 计算默认滚动均值 roll_mean <- rollmean(x, k = k, fill = NA, align = "right") # 用原始值替换NA fill_roll_mean <- coalesce(roll_mean, x)
返回结果为 1 3 3 5 7 9,前2项为原始值,第3项起为窗口均值。
如果不想使用dplyr包,也可以用基础R直接替换:
roll_mean[1:(k-1)] <- x[1:(k-1)]
方案2:前几项自适应窗口计算均值
如果希望前几项也遵循滑动计算逻辑,仅用当前已有的所有观测值计算均值,可以使用rollapply的partial参数实现:
roll_mean_partial <- rollapply(x, width = k, FUN = mean, align = "right", partial = TRUE)
返回结果为 1 2 3 5 7 9,第1项为原始值,第2项为前2个观测值的均值,第3项起为固定窗口大小的均值。
注意事项
- 以上示例均使用时间序列常用的
right右对齐逻辑,如果你使用左对齐或居中对齐,仅需要调整NA替换的对应位置即可。 - 如果是自定义实现的滚动均值逻辑,替换逻辑完全一致,定位NA出现的位置替换为对应原始值即可。
内容的提问来源于stack exchange,提问作者L55
相关产品推荐
相关产品推荐

