我有以下时间序列。这是一个子集,实时系列有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年之前,时间序列是在1953年之后每1小时每3小时进行一次。
预期结果:我希望R告诉我:"是的,数据是每小时数据"或者"不,数据不是每小时一次。 1953年休息了#34;或类似的东西。我只是想确保我的其余数据是每小时数据而不是混合
如果时间序列间隔相等,是否有任何在R中进行测试的方法。我需要每小时观察一次,但当然,我无法逐一检查420,000个观测值?感谢
答案 0 :(得分:2)
如果系列是规则间隔,那么只会有一个区别,所以试试这个:
# 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然后没有。在这种情况下,差异都是1或3小时;因此,唯一差异的数量为2
,因此它不是有规律的间隔。 (我们可以检查unique(diff(p))
以了解差异是什么。)
(请注意,zoo包有一个名为is.regular
的函数;但是,它的目的略有不同。如果一个系列是规则间隔的,除了可能有一些缺失值之外,它将一个系列视为常规。在这里的示例数据中is.regular
会将该系列视为常规系列,因为如果一个系列填充了3个相距2个相距1的点,那么它将是规则间隔的。)