【问题标题】:How do I aggregate and sum irregular time-series data based on a desired regular time interval in R?如何根据 R 中所需的定期时间间隔汇总和汇总不规则时间序列数据?
【发布时间】:2015-06-03 23:06:26
【问题描述】:

我有非常不规则间隔的降雨数据。每次记录 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

我试图掌握 zoo 和 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

有人对此有任何一般性指导吗?我将不胜感激。

【问题讨论】:

  • aggregate(value ~ format(datetime, "%F %H:%M"), df, sum) ?

标签: r time-series xts zoo


【解决方案1】:

将数据框读入动物园对象并计算截断到的时间 分钟,按分钟计算值。然后计算我们数据中从前一分钟到后一分钟的时间序列,去掉 数据中已经存在的任何时间并将其合并为零。如果您真的不需要添加的零次,则在计算 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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2021-07-20
    • 2018-04-15
    • 1970-01-01
    • 2019-03-08
    • 2013-07-28
    • 2018-05-15
    相关资源
    最近更新 更多