Jac*_*ack 2 r moving-average conditional-statements data.table
我想rollmean在R中使用移动平均函数().示例数据:
x<-seq(1,48,by=1)
y<-c(rep(11,12), rep(12,12))
z<-data.frame(x,y)
Run Code Online (Sandbox Code Playgroud)
我想计算z[,"x"]每个z[,"y"](即11和12)的滞后3天的移动平均值,并将它们填充到(新的)第三列,其中每个的前两行由z[,"y"]指定NAs.
使用zoo例如使用data.table包:
library(zoo)
library(data.table)
DT <- data.table(z)
DT[, roll_x := rollmeanr(x, 3, fill = NA), y]
Run Code Online (Sandbox Code Playgroud)
当然,如果有一些缺失值,最好使用rollapplyr:
DT[, roll_x := rollapplyr(x, 3, mean, fill = NA), y]
Run Code Online (Sandbox Code Playgroud)
另一个更快的包是caTools:
library(caTools)
DT[, roll_x := runmean(x, 3, align = 'right', endrule = 'NA'), by = y]
Run Code Online (Sandbox Code Playgroud)
在数据框架方面,这也适用:
transform(z, roll_x = ave(x, y, FUN = function(x) rollmeanr(x, 3, fill = NA)))
Run Code Online (Sandbox Code Playgroud)
您可以使用基本功能filter.
z[ , moving_average := filter(x, rep(1/3, 3), sides = 1), by = "y"]
Run Code Online (Sandbox Code Playgroud)
请注意,滞后3会产生两个 NA s.
| 归档时间: |
|
| 查看次数: |
2808 次 |
| 最近记录: |