这是一个清单.
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.
这该怎么做?
问候
你可以尝试?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)
您甚至可以使用动物园包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)