取矩阵r中行的平均值

use*_*414 3 row r matrix mean

我有以下深度和温度数据矩阵(855行,2列),并希望取每列中每3行的平均值.例如:

 [1,]  -6.7 18.91
 [2,]  -5.4 18.91
 [3,]  -4.0 18.59
 [4,]  -6.7 20.37
 [5,]  -6.7 20.05
 [6,]  -2.7 20.21
 [7,]  -4.0 21.03
 [8,]  -5.4 20.70
 [9,]  -4.0 20.87
[10,]  -2.7 21.37
[11,]  -2.7 21.37
[12,]  -2.7 21.37

mean(data[1:3,1])
mean(data[4:6,1])
Run Code Online (Sandbox Code Playgroud)

对于整个矩阵.如何在不手动编写每3行平均值的代码的情况下完成此操作?任何想法或建议都非常感谢.

Jil*_*ina 6

使用rollapplyzoo包中的函数.有关?rollapply详细信息,请参阅

library(zoo)
rollapply(matrix[,1], width=3, mean, by=3)  
Run Code Online (Sandbox Code Playgroud)

例:

> set.seed(1)
> Data <- matrix(rnorm(30, 100, 50), ncol=2)  # some random data
> rollapply(Data[,1], width=3, mean, by=3)  
[1]  78.69268 118.40534 130.02559 126.60393  71.48317
> # you could check this out by doing some verification as in:
> mean(Data[1:3, 1])
[1] 78.69268
> mean(Data[4:6, 1])
[1] 118.4053
> mean(Data[7:9, 1]) # and so on ...
[1] 130.0256
Run Code Online (Sandbox Code Playgroud)

如果你想在你的矩阵所有列的平均值,然后只需添加by.column=TRUErollapply电话:

> rollapply(Data, width=3, mean, by=3, by.colum=TRUE)
          [,1]      [,2]
[1,]  78.69268 114.71187
[2,] 118.40534 138.90166
[3,] 130.02559  81.12249
[4,] 126.60393 106.79836
[5,]  71.48317  74.48399
Run Code Online (Sandbox Code Playgroud)