在R中如何计算当前行与前后相邻行数值之和的平均值并生成TMA列
R 基于mutate实现三行滑动平均值计算
核心需求
基于现有数值列,新增TMA列,每一行取值为当前行、前一行、后一行三个数值的平均值。
方案1:仅使用dplyr内置函数
无需额外安装第三方包,逻辑直观易调整:
library(dplyr) # 构造示例数据,可替换为你自己的数据集 df <- tibble(value = c(3, 1, 4, 1, 5, 9, 2, 6)) # 新增TMA列 df <- df %>% mutate( TMA = (lag(value, n = 1) + value + lead(value, n = 1)) / 3 )
说明:默认首行无前置行、末行无后置行时返回NA,如果需要自定义边界填充值,可修改lag(value, n = 1, default = 自定义值)、lead(value, n = 1, default = 自定义值)的default参数。
方案2:使用slider包实现通用滑动计算
适合需要灵活调整窗口大小的场景,代码更简洁易维护:
# 首次使用先安装包 # install.packages("slider") library(dplyr) library(slider) df <- df %>% mutate( TMA = slide_dbl( .x = value, .f = mean, .before = 1, .after = 1, .complete = TRUE # 仅窗口内存在3个有效值时返回结果,否则返回NA ) )
说明:如果允许边界行使用截断窗口计算(比如首行用当前行+后一行求平均),去掉.complete = TRUE参数即可。
内容的提问来源于stack exchange,提问作者Rodrigo H. Ozon
相关产品推荐
相关产品推荐

