首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R行的特定范围的多个均值

R行的特定范围的多个均值
EN

Stack Overflow用户
提问于 2019-11-15 16:46:10
回答 2查看 517关注 0票数 1

我有一个data.frame/table with

代码语言:javascript
复制
dim(Tn) 
# 43 rows, 30 columns

我尝试计算每列的5值平均值(即每列39个平均值),其中平均值的计算方式为

代码语言:javascript
复制
(row-4) : row

如图所示:

运行for循环时:

代码语言:javascript
复制
test <- for (j in 2:ncol(Tn)){
          for (i in 5:nrow(Tn)){
              mean(Tn[(i-4):i,j])
}   }

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-15 16:49:01

您需要滚动平均值,它可以使用zoo::rollmean计算。试一试

代码语言:javascript
复制
sapply(Tn[-1], zoo::rollmean, k = 5)

考虑这个可重现的例子,我们在df中计算2列的3值均值

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2019-11-15 17:19:32

如果您使用的是base R,您可以尝试使用:

代码语言:javascript
复制
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)

代码语言:javascript
复制
> 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

然后你会得到:

代码语言:javascript
复制
   Y  Z
1 13 23
2 14 24
3 15 25
4 16 26
5 17 27
6 18 28
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58873256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档