使用hourly.apply函数将10分钟数据聚合到每小时均值失败

时间:2014-06-26 12:03:41

标签: r statistics time-series aggregation xts

我有一个包含日期/时间数据的文件及其所述日期和时间的测量值。在一个月的过程中每十分钟测量一次值,我最终尝试进行时间序列分析。然而,在此之前,我想通过计算每60分钟的平均测量值来将10分钟间隔聚合到每小时间隔。以下是我的数据样本(总共4319个观察结果):

Date/Time                 Value

2013-01-01 00:00:00     31,439999   
2013-01-01 00:10:00     33,439999   
2013-01-01 00:20:00     39         
2013-01-01 00:30:00     35,279999   
2013-01-01 00:40:00     37,279999   
2013-01-01 00:50:00     32,199997   
2013-01-01 01:00:00     35,279999   
2013-01-01 01:10:00     38,199997

我的日期/时间数据属于POSIXlt类型,测量值属于类型因子。 我在这个网站上搜索过,我发现其他用户发布了几个主题,但它们并不适用于我,或者我不能使用帖子上的建议重新创建相同的结果。

例如,另一个用户几乎问了与我完全相同的问题:Aggregate values of 15 minute steps to values of hourly steps 我完全按照他们的答案提供的步骤。

library(xts)
dat.xts <- xts(data$values,
           as.POSIXct(data$datetime))
hourly.apply(dat.xts,mean)

但是对于最后一行,我收到以下错误消息:

Error: could not find function "hourly.apply"

虽然我已经安装了xts包以及zoo包,但是littlely.apply函数似乎源于它。这可能是什么原因? 提前谢谢。

2 个答案:

答案 0 :(得分:2)

&#34; hourly.apply&#34;似乎不存在,但看着“适应日常”。在xts包中的功能似乎很容易创建。

参见xts :: apply.daily。我已经改变了#days?#39;到了&#39;小时&#39;产生以下

apply.hourly <- function(x, FUN,...) {
  ep <- endpoints(x, 'hours')
  period.apply(x, ep, FUN, ...)
}

试一试

my.time <- seq(from = as.POSIXct('2000-01-01 00:00:00'),
           to = as.POSIXct('2000-01-01 2:00:00'),
           by = '10 min')

my.data <- rep(10, length = length(my.time))
my.data <- as.xts(my.data, order.by = my.time)

apply.hourly(my.data, sum)

                [,1]
2000-01-01 00:50:00   60
2000-01-01 01:50:00   60
2000-01-01 02:00:00   10

答案 1 :(得分:1)

sales1512<-read.csv(file.choose())
head(sales1512)
             sdate hsales
1 2011-01-06 01:00      0
2 2011-01-06 02:00      0
3 2011-01-06 03:00      0
4 2011-01-06 04:00      0
5 2011-01-06 05:00      0
6 2011-01-06 06:00      0

library(xts)
dat.xts <- xts(sales1512$hsales,as.POSIXct(sales1512$sdate))
head(dat.xts)
                    [,1]
2011-01-06 00:00:00    0
2011-01-06 01:00:00    0
2011-01-06 02:00:00    0
2011-01-06 03:00:00    0
2011-01-06 04:00:00    0
2011-01-06 05:00:00    0

ep<-endpoints(dat.xts, on="hours", k=4)  #on=”how your data is spaced”,k=how you want to club it
dat.xts.4hourly<-period.apply(dat.xts, FUN=sum,INDEX=ep)
head(dat.xts.4hourly)
                    [,1]
2011-01-06 01:00:00    0
2011-01-06 05:00:00    0
2011-01-06 09:00:00   14
2011-01-06 13:00:00  112
2011-01-06 17:00:00  112
2011-01-06 21:00:00   42

tail(dat.xts.4hourly)
                     [,1]
2013-10-04 05:00:00 275.8
2013-10-04 09:00:00 551.6
2013-10-04 13:00:00 551.6
2013-10-04 17:00:00 551.6
2013-10-04 21:00:00 551.6
2013-10-04 23:00:00 275.8

nrow(dat.xts.4hourly)    
[1] 5523