根据R中的条件滚动平均值

时间:2014-02-06 13:52:04

标签: r conditional-statements data.table moving-average

我想在R中使用移动平均函数(rollmean)。示例数据:

x<-seq(1,48,by=1)
y<-c(rep(11,12), rep(12,12))
z<-data.frame(x,y)

我想计算z[,"x"]的移动平均值,每个z[,"y"](即11&amp; 12)延迟3天,并将它们填充到(新的)第三列,前两行每个z[,"y"]NAs指定。

2 个答案:

答案 0 :(得分:5)

使用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)))

答案 1 :(得分:5)

您可以使用基本功能filter

z[ , moving_average := filter(x, rep(1/3, 3), sides = 1), by = "y"]

请注意,滞后3会导致两个 NA s。