1

我有以下具有每小时值的时间序列:

str(ts_GM)
# An 'xts' object on 2016-07-29 01:00:00/2017-09-01 containing:
#   Data: num [1:7348, 1] 0 0 0 0 NA NA NA NA NA NA ...
#   Indexed by objects of class: [POSIXct,POSIXt] TZ: UTC
#   xts Attributes:  
#  NULL
head(ts_GM)
#                     [,1]
# 2016-07-29 01:00:00    0
# 2016-07-29 02:00:00    0
# 2016-07-29 03:00:00    0
# 2016-07-29 04:00:00    0
# 2016-07-29 06:00:00   NA
# 2016-07-29 07:00:00   NA
tail(ts_GM)
#                     [,1]
# 2017-08-31 19:00:00    0
# 2017-08-31 20:00:00    0
# 2017-08-31 21:00:00    0
# 2017-08-31 22:00:00    0
# 2017-08-31 23:00:00    0
# 2017-09-01 00:00:00    0

由于测量失败,时间序列存在间隙,我需要将测量值与一年中每一天的最大和最小小时理论值进行比较。NA出于这个原因,我需要用从时间序列的开始日期到结束日期的每小时时间戳中的值来填补空白。

我试过:

dates_GM <- seq(from = start(ts_GM), to = end(ts_GM), by = "hour")
merge(ts_GM, dates_GM, fill = NA, all = TRUE)
# and 
merge(ts_GM, dates_GM)

但是有些值是重复的,因为时间序列的最终长度是 9695,应该是 9576。我如何在不重复值的情况下做到这一点?

4

1 回答 1

1

由于无法查看实际数据,我的猜测是您的某些条目ts_GM不在确切的时间范围内。例如,也许您有一个“2016-07-29 05:00:01”或“2016-07-29 04:59:59”条目。因此,当dates_GM有“2016-07-29 05:00:00”条目时,它不会被视为重复项,因此会被创建为新项目。

因此,解决方法是ts_GM在进行合并之前 tidyup 的索引。(如果您认为这是问题所在,但不知道如何解决,请添加评论 - 我会查找一些代码,我有四舍五入到最近的时间。)

(我还建议时区可能很重要,但我认为这不能解释 120 个元素的差异;但是,作为一项规则,所有计算都以 UTC 进行)

于 2018-08-02T20:03:08.037 回答