我想在 R 中使用移动平均函数 (rollmean
)。示例数据:
x<-seq(1,48,by=1)
y<-c(rep(11,12), rep(12,12))
z<-data.frame(x,y)
我想计算每个 z[,"y"]
滞后 3 天的 z[,"x"]
的移动平均值(即 11 & 12) 并将它们填充到(新的)第三列,其中每个 z[,"y"]
的前两行由 NAs
指定。
最佳答案
使用 zoo
例如使用 data.table
包:
library(zoo)
library(data.table)
DT <- data.table(z)
DT[, roll_x := rollmeanr(x, 3, fill = NA), y]
当然,如果有一些缺失值,最好使用 rollapplyr
:
DT[, roll_x := rollapplyr(x, 3, mean, fill = NA), y]
另一个会更快的包是caTools
:
library(caTools)
DT[, roll_x := runmean(x, 3, align = 'right', endrule = 'NA'), by = y]
就数据框而言,这也适用:
transform(z, roll_x = ave(x, y, FUN = function(x) rollmeanr(x, 3, fill = NA)))
关于基于R中条件的滚动平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21604853/