【问题标题】:How to aggregate data one after another in r?如何在r中一个接一个地聚合数据?
【发布时间】:2021-05-07 23:58:58
【问题描述】:

假设我有每小时(总共 6 小时)波高数据,如下所示。我正在使用mean 函数将它们聚合为 2 小时和 3 小时的高度

h_1<-c(2, 4, 6, 7, 9, 11)

这是我使用的函数:

 agg_direct<-function(x){
      
      y<-as.data.frame(x)
      names(y)<-c("wh")
      agg<-lapply(c(1, 2, 3),  function(x) 
        tapply(y$wh, as.integer(gl(nrow(y), x, nrow(y)) ), FUN = mean))
    }
out<-agg_direct(h_1)

这个的输出:

    $h_1
 1  2  3  4  5  6 
 2  4  6  7  9 11 

$h_2
   1    2    3 
 3.0  6.5 10.0 

$h_3
1 2 
4 9

但这正是我想要的:

For 2-h, mean of (2,4), (4,6), (6,7), (7,9), (9,11)
For 3-h, mean of (2,4,6), (4,6,7), (6,7,9), (7,9,11)

所以输出会是这样的:

For 2-h: 3, 5, 6.5, 8, 10
For 3-h: 4, 5.66, 7.33, 9

而且这个过程会在 4 小时、5 小时之后执行……

【问题讨论】:

  • 以下三个值每一步都会求和取平均值

标签: r mean aggregation


【解决方案1】:

我们可以从zoo使用rollmean

library(zoo)
rollmean(h_1, 2)
#[1]  3.0  5.0  6.5  8.0 10.0
rollmean(h_1, 3)
#[1] 4.000000 5.666667 7.333333 9.000000

【讨论】:

    猜你喜欢
    • 2021-09-17
    • 2017-11-07
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2019-10-20
    • 2023-03-31
    相关资源
    最近更新 更多