我有一个动物园对象,它由一个带时间戳(到第二个)的时间序列组成.时间序列是不规则的,因为值之间的时间间隔不是规则地间隔的.
我想将不规则间隔的时间序列对象转换为规则间隔的对象,其中值之间的时间间隔是常数 - 比如15分钟,并且是"真实世界"时钟时间.
一些样本数据可能有助于进一步说明
# Sample data
2011-05-05 09:30:04 101.32
2011-05-05 09:30:14 100.09
2011-05-05 09:30:19 99.89
2011-05-05 09:30:35 89.66
2011-05-05 09:30:45 95.16
2011-05-05 09:31:12 100.28
2011-05-05 09:31:50 100.28
2011-05-05 09:32:10 98.28
Run Code Online (Sandbox Code Playgroud)
我想在每个指定的时间段(例如30秒时间段)聚合它们(使用我的自定义函数),使输出看起来像下面的表格.
关键是我希望从第一次观察时间开始,每30秒按时钟时间聚合30秒.当然,第一次存储桶将是第一次对我要在其中聚合的数据进行记录观察(即行)的存储桶.
2011-05-05 09:30:00 101.32
2011-05-05 09:30:30 89.66
2011-05-05 09:31:00 100.28
Run Code Online (Sandbox Code Playgroud)
在给出的示例中,我的自定义聚合函数只返回"选定行"的"集合"中的第一个值进行聚合.
读入数据然后按分钟汇总:
Lines <- "2011-05-05 09:30:04 101.32
2011-05-05 09:30:14 100.09
2011-05-05 09:30:19 99.89
2011-05-05 09:30:35 89.66
2011-05-05 09:30:45 95.16
2011-05-05 09:31:12 100.28
2011-05-05 09:31:50 100.28
2011-05-05 09:32:10 98.28"
library(zoo)
library(chron)
toChron <- function(d, t) as.chron(paste(d, t))
z <- read.zoo(text = Lines, index = 1:2, FUN = toChron)
aggregate(z, trunc(time(z), "00:01:00"), mean)
Run Code Online (Sandbox Code Playgroud)
结果是:
(05/05/11 09:30:00) (05/05/11 09:31:00) (05/05/11 09:32:00)
97.224 100.280 98.280
Run Code Online (Sandbox Code Playgroud)