特定行范围的 R 倍数均值

R multiple mean by specific range of rows

我有一个数据。frame/table 和

dim(Tn) 
# 43 rows, 30 columns

我正在尝试计算每列的 5 值均值(因此每列 39 个均值),其中均值计算为

(row-4) : row

喜欢这里的图片:

当 运行 for 循环时:

test <- for (j in 2:ncol(Tn)){
          for (i in 5:nrow(Tn)){
              mean(Tn[(i-4):i,j])
}   }

结果我得到 NULL。如何编写此循环以获得所有情况下每列的 5 值均值 table (nrow(Tn)-4)

您需要可以使用 zoo::rollmean 计算的滚动平均值。尝试

sapply(Tn[-1], zoo::rollmean, k = 5)

考虑这个可重现的例子,我们计算 df

中 2 列的 3 值均值
df <- data.frame(a = 1:5, b = 6:10)
sapply(df, zoo::rollmean, k = 3)

#     a b
#[1,] 2 7
#[2,] 3 8
#[3,] 4 9

如果您正在使用 base R,您可以尝试使用:

data.frame(t(sapply(seq(nrow(Tn)-4), function(v) colMeans(Tn[v:(v+4),-1]))))

它为您提供所有列的移动-window 平均值。

例如,给定输入 Tn <- data.frame(X = 1:10, Y = 11:20, Z = 21:30):

> Tn
    X  Y  Z
1   1 11 21
2   2 12 22
3   3 13 23
4   4 14 24
5   5 15 25
6   6 16 26
7   7 17 27
8   8 18 28
9   9 19 29
10 10 20 30

那么你将得到:

   Y  Z
1 13 23
2 14 24
3 15 25
4 16 26
5 17 27
6 18 28