【发布时间】:2017-08-25 23:56:15
【问题描述】:
我有一个数据框,其中包含 40 年的每日最高和最低温度,需要选择最高温度高于最高温度 90% 且最低温度高于最低温度 85% 的所有日子。
我做到了
> 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% 是 15 天窗口中历史数据的第 90%天)
我的意思是使用 15 天的日历窗口从每个日历日的历史数据中计算出的百分位数。也就是说,有 365 天,所以对于第 118 天,我将使用第 111 天、第 112 天……到第 125 天的历史数据。所以在我的例子中,我有 40 年的数据,所以 15 天的窗口将每个日历日的总样本量为 40 年 × 15 天 = 600。移动窗口基于日历日,而不是时间序列
大家有什么意见
【问题讨论】:
标签: r