[英]Calculating mean over consecutive days that meet a condition
我正在使用鱈魚,我可以連續幾天檢測到熱浪,但我不知道如何讓鱈魚選擇在每個熱編織事件中記錄的最高平均溫度。 我的數據的標題(Period1):Year Month Day Mean MAX MIN
我的代碼是:
setDT(Period1)
Period1[, hotday := +(Period1$MAX>=(quantile(Period1$MAX,.9, na.rm = T, type = 6)) & Period1$MIN>=(quantile(Period1$MIN,.8, na.rm = T, type = 6)))
][, hw.length := with(rle(hotday), rep(lengths,lengths))
][hotday==0, hw.length:=0]
代碼的結果:
YEAR MONTH DAY MEAN MAX MIN hotday hw.length
1 2005 7 1 34.7 42 28 0 0
2 2005 7 2 35 41.8 28.8 0 0
3 2005 7 3 34.6 41.5 27 1 2
4 2005 7 4 35.4 43 27.6 1 2
5 2005 7 5 35.4 42 27.4 0 0
6 2005 7 6 34.4 42.2 27.7 0 0
7 2005 7 7 34 39.3 28.6 1 4
8 2005 7 8 34.9 40.6 29 1 4
9 2005 7 9 35.7 41 28.2 1 4
10 2005 7 10 35.1 42.2 28.5 1 4
11 2005 7 11 34.9 42.5 29 0 0
12 2005 7 12 35.5 43.2 28 0 0
13 2005 7 13 36.1 43 29.2 1 3
14 2005 7 14 36.4 43.4 32 1 3
15 2005 7 15 36.5 44.5 29.2 1 3
16 2005 7 16 36.2 42.6 31.2 0 0
17 2005 7 17 34.6 40 30 0 0
18 2005 7 18 33.7 41 28.8 0 0
2005 年 7 月 3 2005/7/3
和2005/7/4
年2005/7/3
月 4 2005/7/3
2005/7/4
最高為35.6
,其中 2005 年2005/7/7
月2005/7/10
日2005/7/7
並於 2005 年2005/7/10
月 10 2005/7/7
結束的第二次熱浪的最高平均值為35.7
。 考慮到連續幾天,我將不勝感激關於如何提取每個熱浪的最高平均值的任何想法。
和:
Period1[hotday == 1, maxmean := max(MEAN) , rleid(hw.length)][]
你得到:
YEAR MONTH DAY MEAN MAX MIN hotday hw.length maxmean
1: 2005 7 1 34.7 42.0 28.0 0 0 NA
2: 2005 7 2 35.0 41.8 28.8 0 0 NA
3: 2005 7 3 34.6 41.5 27.0 1 2 35.4
4: 2005 7 4 35.4 43.0 27.6 1 2 35.4
5: 2005 7 5 35.4 42.0 27.4 0 0 NA
6: 2005 7 6 34.4 42.2 27.7 0 0 NA
7: 2005 7 7 34.0 39.3 28.6 1 4 35.7
8: 2005 7 8 34.9 40.6 29.0 1 4 35.7
9: 2005 7 9 35.7 41.0 28.2 1 4 35.7
10: 2005 7 10 35.1 42.2 28.5 1 4 35.7
11: 2005 7 11 34.9 42.5 29.0 0 0 NA
12: 2005 7 12 35.5 43.2 28.0 0 0 NA
13: 2005 7 13 36.1 43.0 29.2 1 3 36.5
14: 2005 7 14 36.4 43.4 32.0 1 3 36.5
15: 2005 7 15 36.5 44.5 29.2 1 3 36.5
16: 2005 7 16 36.2 42.6 31.2 0 0 NA
17: 2005 7 17 34.6 40.0 30.0 0 0 NA
18: 2005 7 18 33.7 41.0 28.8 0 0 NA
說明:
hotday == 1
(或使用一些代碼打高爾夫球: !!hotday
)。rleid
函數創建一個運行長度 ID,以便您可以按熱浪分組: rleid(hw.length)
。maxmean := max(MEAN)
。如果您只想提取熱浪的最大值,可以使用:
> Period1[!!hotday, max(MEAN) , rleid(hw.length)]$V1
[1] 35.4 35.7 36.5
使用數據:
Period1 <- fread('YEAR MONTH DAY MEAN MAX MIN hotday hw.length
2005 7 1 34.7 42 28 0 0
2005 7 2 35 41.8 28.8 0 0
2005 7 3 34.6 41.5 27 1 2
2005 7 4 35.4 43 27.6 1 2
2005 7 5 35.4 42 27.4 0 0
2005 7 6 34.4 42.2 27.7 0 0
2005 7 7 34 39.3 28.6 1 4
2005 7 8 34.9 40.6 29 1 4
2005 7 9 35.7 41 28.2 1 4
2005 7 10 35.1 42.2 28.5 1 4
2005 7 11 34.9 42.5 29 0 0
2005 7 12 35.5 43.2 28 0 0
2005 7 13 36.1 43 29.2 1 3
2005 7 14 36.4 43.4 32 1 3
2005 7 15 36.5 44.5 29.2 1 3
2005 7 16 36.2 42.6 31.2 0 0
2005 7 17 34.6 40 30 0 0
2005 7 18 33.7 41 28.8 0 0')
我不知道你的代碼的詳細情況,但這里有一個提示,假設 Period1 是一個數據幀:
提取熱期
hotPeriod <- Period1[, hotday := +(Period1$MAX>=(quantile(Period1$MAX,.9, na.rm = T, type = 6)) & Period1$MIN>=(quantile(Period1$MIN,.8, na.rm = T, type = 6)))
][, hw.length := with(rle(hotday), rep(lengths,lengths))
][hotday==0, hw.length:=0]
提取該期間平均值的最大值
max.of.mean <- max( hotPeriod$Mean )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.