如何计算每三个连续元素的平均值

Sum*_*mit 1 r

这是一个清单.

 1 2 3 4 5 6 7 8 9 10. 
Run Code Online (Sandbox Code Playgroud)

我想计算每三个连续元素的平均值.例如,输出将是NA NA 2 3 4 5 6 7 8 9.

这该怎么做?

问候

sgi*_*ibb 9

你可以尝试?embed和?rowMeans:

v <- 1:10

m <- embed(v, 3)
m
#    [,1] [,2] [,3]
#[1,]    3    2    1
#[2,]    4    3    2
#[3,]    5    4    3
#[4,]    6    5    4
#[5,]    7    6    5
#[6,]    8    7    6
#[7,]    9    8    7
#[8,]   10    9    8

rowMeans(m)
# 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)

编辑:另一种解决方案是?filter:

filter(x=v, filter=rep(1/3, 3), sides=1)
# Time Series:
# Start = 1 
# End = 10 
# Frequency = 1 
#  [1] NA NA  2  3  4  5  6  7  8  9
Run Code Online (Sandbox Code Playgroud)


Jil*_*ina 6

您甚至可以使用动物园包rollapply 或rollmean动物园包

> library(zoo)
> v <- 1:10
> rollapply(v, width=3, align="right", FUN=mean, fill=NA )
 [1] NA NA  2  3  4  5  6  7  8  9

> rollmean(v, k=3, align="right",  fill=NA )
 [1] NA NA  2  3  4  5  6  7  8  9
Run Code Online (Sandbox Code Playgroud)