[英]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告訴我:“是,數據是每小時數據”或“否,數據不是每小時數據。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
會考慮該序列是常規的,因為如果一個點將相隔3的點填充為相隔1的兩個值,則該點將有規律地隔開。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.