R:计算特定时间动物园对象的平均值

R: calculate mean of zoo object at particular times

我每分钟采样 3 天长的时间序列(数据)(60*24*3 个值):

require(zoo)
t<-seq(as.POSIXlt("2015/02/02 00:01:00"),as.POSIXlt("2015/02/04 24:00:00"), length.out=60*24*3)
d<-seq(1,2, length.out=60*24*3)
data<-zoo(d,t)

我要计算:

  1. 假设所有时间均等,每小时每一分钟的平均值(超过三天)。在这种情况下,我应该在带有时间戳的输出中有 60 个值:

01:00,02:00,...,60:00。每个平均值必须在 24x3=72 个值上计算,因为我们在三天长的时间序列中有 72 小时。

  1. 同上,但额外跟踪时间:

00:01:00,00:02:00,...,23:60:00。每个平均值将根据三个值计算,因为我们有三天长的时间序列。

您可以使用 data.tablelubridate 执行此操作:

library(data.table)
library(lubridate)
##
Dt <- data.table(
  Data=as.numeric(data),
  Index=index(data))
##
min_dt <- Dt[
  ,list(Mean=mean(Data)),
  by=list(Minute=minute(Index))]
##
hmin_dt <- Dt[
  ,list(Mean=mean(Data)),
  by=list(Hour=hour(Index),
          Minute=minute(Index))]
##
R> head(min_dt)
   Minute     Mean
1:      1 1.493170
2:      2 1.493401
3:      3 1.493633
4:      4 1.493864
5:      5 1.494096
6:      6 1.494327
##
R> head(hmin_dt)
   Hour Minute     Mean
1:    0      1 1.333411
2:    0      2 1.333642
3:    0      3 1.333874
4:    0      4 1.334105
5:    0      5 1.334337
6:    0      6 1.334568

数据:

library(zoo)
t <- seq(
  as.POSIXlt("2015/02/02 00:01:00"),
  as.POSIXlt("2015/02/04 24:00:00"), 
  length.out=60*24*3)
d <- seq(1,2,length.out=60*24*3)
data <- zoo(d,t)

这两个都创建动物园系列使用aggregate.zoo。生成的动物园系列的索引将是 chron "times" class。

library(chron) # "times" class

aggregate(data, times(format(time(data), "00:%M:00")), mean)

aggregate(data, times(format(time(data), "%H:%M:00")), mean)

如果索引是 class "character" 没问题,那么 times 可以省略,在这种情况下不需要 chron。