ここにリストがあります。
1 2 3 4 5 6 7 8 9 10.
連続する3つの要素ごとに平均を計算したいと思います。たとえば、出力は NA NA 2 3 4 5 6 7 8 9 になります。
これを行う方法?
よろしく
ここにリストがあります。
1 2 3 4 5 6 7 8 9 10.
連続する3つの要素ごとに平均を計算したいと思います。たとえば、出力は NA NA 2 3 4 5 6 7 8 9 になります。
これを行う方法?
よろしく
これはlag
関数を使用した 4 番目の方法です。
v <- 1:10
rowMeans(do.call(cbind, lapply(0:2, lag, x=as.ts(v))))
# [1] NA NA 2 3 4 5 6 7 8 9 NA NA
これをラップしna.omit
て s を削除できNA
ます。
ベンチマーク
library(microbenchmark)
library(zoo)
v <- 1:10000
f.embed <- function() rowMeans(embed(v, 3))
f.filter <- function() filter(x=v, filter=rep(1/3, 3), sides=1)
f.lag <- function() rowMeans(do.call(cbind, lapply(0:2, lag, x=as.ts(v))))
f.rollmean <-function() rollapply(v, width=3, align="right", FUN=mean, fill=NA )
microbenchmark(f.embed(), f.filter(), f.lag(), f.rollmean())
# Unit: microseconds
# expr min lq median uq max neval
# f.embed() 486.7 499.8 505.6 517.1 1633.1 100
# f.filter() 285.3 300.7 307.2 316.6 912.5 100
# f.lag() 1601.6 1640.9 1677.0 2188.3 2838.7 100
# f.rollmean() 4265.4 4853.5 4902.0 5364.8 52098.9 100