我有一个data.frame/table with
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值平均值表(nrow(Tn)-4)?
发布于 2019-11-15 16:49:01
您需要滚动平均值,它可以使用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发布于 2019-11-15 17:19:32
如果您使用的是base R,您可以尝试使用:
data.frame(t(sapply(seq(nrow(Tn)-4), function(v) colMeans(Tn[v:(v+4),-1]))))它给出了所有列的移动窗口平均值。
例如,给定输入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 28https://stackoverflow.com/questions/58873256
复制相似问题