6.21 窗口平滑

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