如何在r中一个接一个地聚合数据?
How to aggregate data one after another in r?
假设我有如下每小时(总共 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 小时后执行...
我们可以使用 rollmean
来自 zoo
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
假设我有如下每小时(总共 6 小时)的波高数据。我使用 mean
函数
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 小时后执行...
我们可以使用 rollmean
来自 zoo
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