6.21 窗口平滑
6.21.1 问题
你想要计算序列给定窗口长度的平均数。这是平滑数据的一种方式。
6.21.2 方案
假设你有一个数值向量并且想要找出第一个连续四个数、第二个连续四个数等等如此的平均数(就像用一个窗口在序列上移动,移动一次,计算一次)。
# 生成有22个(0-99)以内的随机数向量
set.seed(123)
x <- floor(runif(22) * 100)
x
#> [1] 28 78 40 88 94 4 52 89 55 45 95 45 67 57 10 89 24
#> [18] 4 32 95 88 69
# 将向量长度取整到最接近的4的倍数
newlength <- ceiling(length(x)/4) * 4
newlength
#> [1] 24
# 给新增的数值取NA值
x[newlength] <- NA
x
#> [1] 28 78 40 88 94 4 52 89 55 45 95 45 67 57 10 89 24
#> [18] 4 32 95 88 69 NA NA
# 将它转换为4行的矩阵
x <- matrix(x, nrow = 4)
x
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 28 94 55 67 24 88
#> [2,] 78 4 45 57 4 69
#> [3,] 40 52 95 10 32 NA
#> [4,] 88 89 45 89 95 NA
# 计算每一列的均值,忽略NA值
colMeans(x, na.rm = TRUE)
#> [1] 58.50 59.75 60.00 55.75 38.75 78.50