R语言计算数据框滚动均值及rollapply报错解惑
嗨,我来帮你解决这个滚动均值的问题~
首先明确说:基础R里没有专门计算滚动均值的内置函数,不过我们可以用扩展包轻松实现。你尝试的rollapply是zoo包里的常用工具,报错的原因很简单——你漏了必须指定的width参数,我来给你详细拆解:
关于width参数的含义
这个参数定义了滚动窗口的大小,也就是每次计算均值时要包含多少行数据。举个例子:
- 如果
width=3,就是计算当前行 + 前两行的均值; - 如果
width=2,就是当前行 + 前一行的均值; - 你可以根据需求设置窗口大小,这个参数是
rollapply的必填项,不指定就会触发报错。
具体实现示例
先构造和你类似的数据框:
# 模拟你的数据 s <- data.frame( Value = c(1, 78, 97, 56, 32), Id = c("xxx-rrr-ttt", "ggg-oop-rty", "fad-dar-oki", "abc-def-ghi", "jkl-mno-pqr") )
方法1:用zoo包的rollapply
首先安装并加载zoo包,然后指定窗口大小和对齐方式:
install.packages("zoo") # 首次使用需要安装 library(zoo) # 计算窗口大小为2的滚动均值,对齐到当前行(right表示结果对应窗口的最后一行) s$rolling_mean <- rollapply( s$Value, width = 2, FUN = mean, align = "right", fill = NA # 窗口不完整的行(比如第一行)用NA填充 )
如果想更简便,zoo还有专门的rollmean函数,是rollapply针对均值的简化版:
s$rolling_mean <- rollmean(s$Value, k = 2, align = "right", fill = NA)
方法2:用dplyr+slider的管道风格
如果你习惯用tidyverse的语法,可以用slider包的slide_dbl:
install.packages(c("dplyr", "slider")) library(dplyr) library(slider) s <- s %>% mutate( rolling_mean = slide_dbl( Value, mean, .before = 1, # 包含当前行之前的1行,总共2行窗口 .complete = FALSE # 允许窗口不完整,第一行会返回自身的均值;设为TRUE则返回NA ) )
补充说明
align参数:right表示结果对应窗口的最后一行(也就是当前行),left对应窗口第一行,center对应窗口中间行,根据你的需求选择;fill参数:用来处理窗口不完整的行(比如前n-1行,n是窗口大小),可以设为NA、0或者其他你需要的值。
内容的提问来源于stack exchange,提问作者Jatt
相关产品推荐
相关产品推荐

