我有一個數據框架,每天的最高和最低溫度爲40年,需要選擇最高溫度超過第90百分位的最高溫度和最低溫度超過第85百分位的最低溫度溫度。滾動百分比條件選擇r
我能做到這一點
> head(df)
YEAR MONTH DAY Date MEAN MAX MIN
1 1965 1 1 1/1/1965 NA 27.0 17.0
2 1965 1 2 1/2/1965 24.0 28.0 20.7
3 1965 1 3 1/3/1965 19.9 23.7 16.2
4 1965 1 4 1/4/1965 18.0 23.4 12.0
5 1965 1 5 1/5/1965 19.7 24.0 14.0
6 1965 1 6 1/6/1965 18.6 24.0 13.0
df[, hotday := +(df$MAX>=(quantile(df$MAX,.90, na.rm = T, type = 6)) & df$MIN>=(quantile(df$MIN,.85, na.rm = T, type = 6)))
] [, length := with(rle(hotday), rep(lengths,lengths)) # to calculate lenght so I can select consecutive days only
] [hotday==0, length:=0][!!hotday, Highest_Mean := max(MEAN) , rleid(length)][] # to find the highest Mean temp for each consecutive group
但我需要使用中心滾動百分每15天(即,對於給定的一天,最高氣溫90百分位是90到做同樣的事情以當天爲中心的15天窗口的歷史數據的百分位數)
我的意思是百分位數是根據每個日曆日的歷史數據使用15天日曆窗口計算的。也就是說,在第118天我將有365天,我將使用第111,112,......天的歷史數據到第125天。所以在我的情況下,我有40年的數據,所以15天的窗口將會每個日曆日的總樣本量爲40年×15天= 600。移動窗口是基於
任何想法請
感謝。你能否解釋一下代碼,比如#7和8的意思。請注意,我必須包含使用第85百分位的最低溫度 – Ali
我添加了最低溫度測試。當你提到第85百分位數時,我假設你想要15%的最冷天,因此可能是0.15。我還添加了一個玩具數據集來展示測試如何進行...... –
我非常感謝您的幫助。我的問題不是很清楚,我的道歉。我的意思是,使用15天日曆窗口從每個日曆的歷史數據計算百分比。也就是說,有365天,因此在第8天我們將使用第1天,第2天,第15天的歷史數據。所以在我的情況下,我有40年的數據,所以15天的窗口將產生每個日曆日40年×15天= 600的總樣本量。所以移動窗口基於日曆日,而不是時間序列。 – Ali