簡體   English   中英

計算矩陣中的滾動平均值

[英]Calculate rolling average in matrix

我想計算滾動平均值。 具體來說,我想用前3列的滾動平均值填充Mat1的第5列和第6列的每一行 對於第5列,這意味着在2,3,4上取平均值,對於第6列,這意味着在第3、4、5列上取平均值。 我只想在計算平均值的列中沒有NA時計算平均值。

mat1 <- data.frame(matrix(nrow =6, ncol =6))
mat1[1:4,1:4] = rnorm(16,0,1)
mat1[5:6,1:3] = rnorm(6,0,1)
mat1 

        X1          X2          X3         X4 X5 X6
1  0.40023542  2.05111693 0.695422777  0.9938004 NA NA
2  0.22673283 -0.86433614 0.002620227  0.8464388 NA NA
3  0.88522293 -0.72385091 0.751663489  1.3240476 NA NA
4  0.65373734  1.68385938 0.759718967 -0.4577604 NA NA
5 -0.09442161  0.72186678 0.180312264         NA NA NA
6  0.39930843  0.04311092 2.141065229         NA NA NA

對於條目1,5 =平均值(2.051,0.69,0.99),對於條目1,6 =平均值(0.69,0.99,平均值(2.051,0.69,0.99))。

我們可以使用for循環來計算最后三列的滾動平均值

cols <- 5:6
for(i in cols) {
   mat1[i] <- rowMeans(mat1[(i-3):(i-1)])
}

mat1
#           X1          X2          X3         X4           X5        X6
#1  0.40023542  2.05111693 0.695422777  0.9938004  1.246780036 0.9786677
#2  0.22673283 -0.86433614 0.002620227  0.8464388 -0.005092371 0.2813222
#3  0.88522293 -0.72385091 0.751663489  1.3240476  0.450620060 0.8421104
#4  0.65373734  1.68385938 0.759718967 -0.4577604  0.661939316 0.3212993
#5 -0.09442161  0.72186678 0.180312264         NA           NA        NA
#6  0.39930843  0.04311092 2.141065229         NA           NA        NA

如注釋中所述,如果計算中存在任何NA值,則將返回NA 如果需要忽略NA值,可以在rowMeans設置na.rm = TRUE

數據

mat1 <- structure(list(X1 = c(0.40023542, 0.22673283, 0.88522293, 0.65373734, 
-0.09442161, 0.39930843), X2 = c(2.05111693, -0.86433614, -0.72385091, 
 1.68385938, 0.72186678, 0.04311092), X3 = c(0.695422777, 0.002620227, 
0.751663489, 0.759718967, 0.180312264, 2.141065229), X4 = c(0.9938004, 
0.8464388, 1.3240476, -0.4577604, NA, NA), X5 = c(NA, NA, NA, 
NA, NA, NA), X6 = c(NA, NA, NA, NA, NA, NA)), class = "data.frame", 
row.names = c("1", "2", "3", "4", "5", "6"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM