2017-03-26 28 views
0

我正在分析氣象站的歷史風速(如果趨勢正在增加或減少等)。 現在我每天都有一個價值。 我想統計彼此相關的日子(例如1958-03-18,19,20 ......)。對於每年我想有一個價值連續3天以上發生多少(風暴)天。R在我的研究中計算XTS(或data.frame)對象中的相關日期

例如:

1982-01-30 41.04 
1982-02-02 45.72 
1982-02-03 46.8 
1982-02-04 41.04 
1982-02-12 39.24 
1982-02-17 53.28 
1982-02-18 49.68 
1982-02-19 40.32 
1982-03-01 46.08 

在1982年2月的2倍的情況是(2,3,4)和(17,18,19)。

有沒有人知道如何計算這個,並把它放在一個新的表中進一步分析/繪圖?

1982 23 
1983 7 
1984 11 
. 
. 
. 

至少每年計算所有日子也會對我有幫助。

親切的問候 薩沙

+0

你已經使用一天的閾值是否合格爲暴風雨日? –

+0

假設您添加一個數據列爲1,1,1,2,2,2,3,3,3 ..以分組相鄰日期。然後融化您的表以摺疊每組中的最小值的行,最後在熔化的表中對該最小值超過閾值的行進行計數。您將需要重複這些步驟,列爲1,1,2,2,2,3,3,3,4,4 ..和1,2,2,2,3,3,3,4,4, 4 .. –

+0

我們的數據庫是每天每小時的值。使用每天24個值的最大值。之後,我們選擇這個值大於39公里/小時的所有日子。 – Sascha

回答

1

下面是(根據您的評論風> 39)一個簡單的方法來識別暴雨天,有三個連續的暴雨天的日期。

#create example data 
fakedates <- as.Date("1982-01-01")+(1:730) 
fakewind <- sample(1:80, length(fakedates), replace = TRUE) 
dateyear <- format(fakedates, "%Y") 

df <- data.frame("dates"=fakedates, "maxwind"=fakewind, "year"=dateyear) 

#identify 'storm' days where max wind is >39 
df$storm <- df$maxwind > 39 #identify storm days 

# ensure original data is in chronological order, otherwise you would need to sort first 
# e.g. if(is.unsorted(original$dates), sort(original$dates, .... etc) 

#identify 3-day storms - undetermined for last two days in the record 
df$storm3 <- 
    c(df$storm[1:(length(df$storm) - 2)] & 
     df$storm[2:(length(df$storm) - 1)] & 
     df$storm[3:(length(df$storm))], "unknown", "unknown") 

#select all storm day records 
dfs <- df[df$storm == TRUE, c(1:3)] 

#select only dates of 3-day storms 
dfs3 <- df[df$storm3== TRUE,(1:3)] 

你的輸出就會是這個樣子:

> head(dfs3) 
     dates maxwind year 
12 1982-01-13  57 1982 
13 1982-01-14  47 1982 
33 1982-02-03  65 1982 
49 1982-02-19  79 1982 
61 1982-03-03  49 1982 
68 1982-03-10  55 1982 

您可以通過一年總結,做你需要的任何其他分析,無論是與所有困天(DFS)或三天的暴雨天只有(dfs3)。

當您更熟悉R時,您可以通過各種其他方式解決任務,例如與包裹dplyr

+0

嗨Jules,我不是很熟悉R,但我嘗試使用你的建議。非常感謝你,它看起來像我可以使用:)與dplyr我想檢查例如哪些日子發生在所有車站。 – Sascha