如何根据R中所需的常规时间间隔对不规则的时间序列数据进行汇总和求和?

时间:2015-03-30 19:27:38

标签: r time-series xts zoo

我的降雨数据非常不规律。每次记录0.01英寸的降雨时,数据记录器会将时间记录为秒。一些数据点如下所示:

datetime <- as.POSIXct(as.character(c("2/5/15 16:28:38", "2/5/15 16:29:36", "2/5/15 16:29:41", "2/5/15 16:30:00")), format="%m/%d/%y %H:%M:%S")
value <- rep(0.01, 4)
df <- data.frame(datetime, value)
df


>                  datetime  value
>     1 2015-02-05 16:28:38  0.01
>     2 2015-02-05 16:29:36  0.01
>     3 2015-02-05 16:29:41  0.01
>     4 2015-02-05 16:30:00  0.01

我试图抓住动物园和xts,但无济于事。我的最终目标是将“值”加以均匀分钟,如下所示:

2015-02-05 16:27  0
2015-02-05 16:28  0.01
2015-02-05 16:29  0.02
2015-02-05 16:30  0.01
2015-02-05 16:31  0

有人对此有任何一般性指导吗?我非常感激。

1 个答案:

答案 0 :(得分:1)

将数据框读入zoo对象并计算截断到的对象的时间 分钟,积累了分钟的价值。然后计算从我们的数据中的时间之前一分钟到一分钟之间的一系列时间,删除 任何时候已经在数据中并合并填充零。如果你真的不需要增加零次,那么在计算zcum之后停止:

library(zoo)

z <- read.zoo(df, tz = "")
mins <- trunc(time(z), "mins")
zcum <- ave(z, mins, FUN = cumsum)

rng <- range(mins)
tt <- seq(rng[1] - 60, rng[2] + 60, by = "mins")
tt <- tt[ ! format(tt) %in% format(mins) ]
merge(zcum, zoo(, tt), fill = 0)

,并提供:

2015-02-05 16:27:00 2015-02-05 16:28:38 2015-02-05 16:29:36 2015-02-05 16:29:41 
               0.00                0.01                0.01                0.02 
2015-02-05 16:30:00 2015-02-05 16:31:00 
               0.01                0.00