R函数来聚合数据

R函数来聚合数据,r,time-series,aggregate,xts,zoo,R,Time Series,Aggregate,Xts,Zoo,我有一个称为x的不规则时间序列: structure(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 22, 34, 56, 25, 78, 10, 0, 54, 55, 55, 55, 0, 0, 0, 0, 67, 0, 78, 99, 10, 10), index = structure(c(1167814140, 1167814740, 1167815340, 1167815940, 1167816540, 1167817140, 1167817740, 1167

我有一个称为x的不规则时间序列:

structure(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 22, 34, 56, 25, 78, 10, 0, 
54, 55, 55, 55, 0, 0, 0, 0, 67, 0, 78, 99, 10, 10), index = structure(c(1167814140, 
1167814740, 1167815340, 1167815940, 1167816540, 1167817140, 1167817740, 
1167818340, 1167818940, 1167819540, 1167820140, 1167820740, 1167821340, 
1167821940, 1167822540, 1167823140, 1167823740, 1167824340, 1167825000, 
1167825600, 1167826200, 1167826800, 1167827400, 1167828000, 1167828600, 
1167829200, 1167829800, 1167830400, 1167831000, 1167831600, 1167832200
), class = c("POSIXct", "POSIXt")), class = "zoo")
我想将x转换成一个常规的时间序列,每10、15、30、60分钟聚合一次值。新的时间序列应始终从0分钟开始(必要时添加NA)。 此外,聚合应能计算前一时期的累积值

我试过:

x10 <- to.minutes10(x)
x15 <- to.minutes15(x)
x30 <- to.minutes30(x)
x60 <- to.hourly(x)
但我期待着:

2007-01-03 09:00:00      3
2007-01-03 09:15:00      3
2007-01-03 09:30:00      9
2007-01-03 09:45:00      6
2007-01-03 10:00:00     15
2007-01-03 10:15:00      9
2007-01-03 10:30:00     32
...

有什么想法吗?

到。period
不执行聚合,它只是将时间序列转换为所需的频率。要进行聚合,请使用
zoo.aggregate
。在
xts
包中还有一个方便的函数
align.time
,用于处理
by
参数:

as.xts(aggregate(x, align.time(index(x), 15*60)))
                    [,1]
2007-01-03 09:00:00    3
2007-01-03 09:15:00    3
2007-01-03 09:30:00    9
2007-01-03 09:45:00    6
2007-01-03 10:00:00   15
2007-01-03 10:15:00    9
2007-01-03 10:30:00   32
2007-01-03 10:45:00   34
2007-01-03 11:00:00   81
2007-01-03 11:15:00   78
2007-01-03 11:30:00   10
2007-01-03 11:45:00   54
2007-01-03 12:00:00   55
2007-01-03 12:15:00  110
2007-01-03 12:30:00    0
2007-01-03 12:45:00    0
2007-01-03 13:00:00    0
2007-01-03 13:15:00   67
2007-01-03 13:30:00   78
2007-01-03 13:45:00  109
2007-01-03 14:00:00   10

我如何使您的解决方案适应使用“平均值”而不是“总和”进行聚合?请看
FUN
参数:
?聚合
。设置
FUN=mean
就足够了。
as.xts(aggregate(x, align.time(index(x), 15*60)))
                    [,1]
2007-01-03 09:00:00    3
2007-01-03 09:15:00    3
2007-01-03 09:30:00    9
2007-01-03 09:45:00    6
2007-01-03 10:00:00   15
2007-01-03 10:15:00    9
2007-01-03 10:30:00   32
2007-01-03 10:45:00   34
2007-01-03 11:00:00   81
2007-01-03 11:15:00   78
2007-01-03 11:30:00   10
2007-01-03 11:45:00   54
2007-01-03 12:00:00   55
2007-01-03 12:15:00  110
2007-01-03 12:30:00    0
2007-01-03 12:45:00    0
2007-01-03 13:00:00    0
2007-01-03 13:15:00   67
2007-01-03 13:30:00   78
2007-01-03 13:45:00  109
2007-01-03 14:00:00   10