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

时间:2015-02-21 19:22:08

标签: r dataframe time-series

我有以下时间序列。这是一个子集,实时系列有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个观测值?感谢

1 个答案:

答案 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的点,那么它将是规则间隔的。)