1

ここにリストがあります。

 1 2 3 4 5 6 7 8 9 10. 

連続する3つの要素ごとに平均を計算したいと思います。たとえば、出力は NA NA 2 3 4 5 6 7 8 9 になります。

これを行う方法?

よろしく

4

3 に答える 3

3

これは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
于 2013-11-14T14:43:48.070 に答える