如何根据 R 中所需的规则时间间隔聚合和求和不规则时间序列数据?
How do I aggregate and sum irregular time-series data based on a desired regular time interval in R?
我有非常不规则间隔的降雨数据。每次记录 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 的窍门,但无济于事。我的最终目标是按偶数分钟对 "values" 求和,如下所示:
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
有人对此有任何一般性指导吗?我将不胜感激。
将数据帧读入动物园对象并计算截断到
分钟,按分钟累计值。然后计算我们数据中时间前一分钟到后一分钟的时间序列,去掉
任何时候已经在数据中并将其合并为零。如果您真的不需要添加的零次,则在计算 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
我有非常不规则间隔的降雨数据。每次记录 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 的窍门,但无济于事。我的最终目标是按偶数分钟对 "values" 求和,如下所示:
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
有人对此有任何一般性指导吗?我将不胜感激。
将数据帧读入动物园对象并计算截断到
分钟,按分钟累计值。然后计算我们数据中时间前一分钟到后一分钟的时间序列,去掉
任何时候已经在数据中并将其合并为零。如果您真的不需要添加的零次,则在计算 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