检测和测试数据是否在 R 中有规律地间隔

Detecting & Testing if the data is regularly spaced in R

我有以下时间序列。这是一个子集,实时序列有 420,000 行。

问题:检测和测试数据是否有规则间隔。

        USAF  WBAN        YR--MODAHRMN DIR
 1950 723890 93193 1972-08-31 15:00:00 280
 1951 723890 93193 1972-08-31 18:00:00 090
 1952 723890 93193 1972-08-31 21:00:00 150
 1953 723890 93193 1972-09-01 00:00:00 240 
 1954 723890 93193 1972-09-01 01:00:00 300
 1955 723890 93193 1972-09-01 02:00:00 290

我们需要检查的列是 "YR--MODAHRMN" 即:

 class(sdf$"YR--MODAHRMN")
 [1] "POSIXlt" "POSIXt" 

1952 年观测前,时间序列每 3 小时采集一次,1953 年之后,每 1 小时采集一次。

预期结果:我希望 R 告诉我:"Yes, the data is hourly data" OR "No, the data is not hourly. There is a break in 1953" 或类似的东西。我只想确保我的其余数据是每小时数据而不是混合数据

如果时间序列是等间隔的,是否有任何方法可以在 R 中进行测试。我只需要每小时的观察值,当然,我不能把420,000个观察值一一检查?谢谢

如果系列是规则间隔的,那么只有一个区别,所以试试这个:

# test data
ch <- c("1972-08-31 15:00:00", "1972-08-31 18:00:00", "1972-08-31 21:00:00", 
"1972-09-01 00:00:00", "1972-09-01 01:00:00", "1972-09-01 02:00:00")
p <- as.POSIXct(ch)

length(unique(diff(p)))
## [1] 2

如果长度为 1,则它是规则间隔的,如果 > 1 则不是。在这种情况下,差异都是 1 或 3 小时;因此,唯一差异的数量是 2,因此它不是规则间隔的。 (我们可以检查 unique(diff(p)) 以了解不同之处。)

(请注意,zoo 包中有一个名为 is.regular 的函数;但是,它的用途略有不同。如果序列间隔规则,则它认为该序列是规则的,但可能存在一些缺失值。在示例中这里的数据 is.regular 会认为该系列是规则的,因为如果用两个相距 1 的值填充相距 3 的点,那么它就会有规律地间隔。)