特定行范围的 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
我有一个数据。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
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