我有一个包含以下数据的zoo对象:
Qty
2013-11-25 12:41:21.33 2
2013-11-25 12:41:22.25 2
2013-11-25 12:41:22.75 75
2013-11-25 12:41:24.22 3
2013-11-25 12:41:25.22 1
2013-11-25 12:41:26.22 1
我希望按秒聚合它,对每秒内的值求和,并且对于样本中没有的秒数,将数量设置为零,以便我有以下常规系列
Qty
2013-11-25 12:41:21 2
2013-11-25 12:41:22 77
2013-11-25 12:41:23 0
2013-11-25 12:41:24 3
2013-11-25 12:41:25 1
2013-11-25 12:41:26 1
注意第三行(尝试使用聚合如晕影中所解释的那样,使用一个转换原始时间戳以消除毫秒精度的函数,在出现第三行并且有一个常规系列时失败)
我试过,感谢下面的回答:
如果a是我原来的动物园系列
b=aggregate(a,by=cut(as.POSIXct(floor(as.numeric(index(a))),origin="1970-01-01"), breaks='1 sec'),FUN=sum)
但是这给了 数量 2013-11-25 12:41:21 2 2013-11-25 12:41:22 77 2013-11-25 12:41:24 3 2013-11-25 12:41:25 1 2013-11-25 12:41:26 1
所以没有行
2013-11-25 12:41:23 0
这使得该系列成为常规,这是我的问题 非常感谢您的帮助
答案 0 :(得分:3)
读入测试数据,按秒聚合,然后将聚合系列与网格合并以填充它:
# read test data
Lines <- "2013-11-25 12:41:21 2
2013-11-25 12:41:22.25 2
2013-11-25 12:41:22.75 75
2013-11-25 12:41:24.22 3
2013-11-25 12:41:25.22 1
2013-11-25 12:41:26.22 1"
library(zoo)
z <- read.zoo(text = Lines, index = 1:2, tz = "")
# aggregate and merge with grid to fill it out
ag <- aggregate(z, as.POSIXct(trunc(time(z), "sec")), sum)
g <- zoo(, seq(start(z), end(z), "sec"))
merge(ag, g, fill = 0)