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

时间:2015-02-02 19:04:14

标签: r time-series zoo

我每分钟都有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个带时间戳的值:
  2. 01:00,02:00,...,60:00。每个均值必须以24x3 = 72的值计算,因为我们在三天的长时间序列中有72小时。

    1. 与上述相同,但另外跟踪时间:
    2. <00> 00:01:00,00:02:00,...,23:60:00每个均值将通过三个值计算,因为我们有三天的时间序列。

2 个答案:

答案 0 :(得分:1)

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

library(chron) # "times" class

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

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

如果索引属于类"character",那么可以省略times,在这种情况下不需要chron。

答案 1 :(得分:0)

您可以使用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)