簡體   English   中英

檢測並測試數據是否在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告訴我:“是,數據是每小時數據”或“否,數據不是每小時數據。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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM