在R中应用滚动四分位数并跳过?

时间:2017-08-28 20:07:43

标签: r

我有以下10年的天气数据,其中每个日期有10个值(10y * 1d)。我一直在研究的是使用每15天日历窗口的居中移动百分位数来计算第90个百分位数(对于最高和最低温度)。例如,对于5月1日,第90百分位数将从4月24日到5月8日计算。然后5月2日将使用4月25日至5月9日的数据。因此,对于我的数据,我必须使用150(10y * 15d)的窗口,因为我每天有10个值

require(caTools)
k=150
df$MPerMAX<- runquantile(df$MAX, k, probs = .9, endrule="NA" )

df[71:83,]
     YEAR MONTH DAY MEAN  MAX  MIN      Data2    MD MPerMAX
121  1985     5   1 21.7 28.3 15.5 1985-05-01 05-01      NA
486  1986     5   1 24.0 32.0 16.8 1986-05-01 05-01      NA
851  1987     5   1 25.0 32.6 18.4 1987-05-01 05-01      NA
1217 1988     5   1 26.6 32.2 18.2 1988-05-01 05-01      NA
1582 1989     5   1 26.5 31.0 18.0 1989-05-01 05-01    32.8
1947 1990     5   1 24.3 29.4 19.2 1990-05-01 05-01    32.8
2312 1991     5   1 26.3 33.8 21.2 1991-05-01 05-01    32.8
2678 1992     5   1 23.1 26.2 20.4 1992-05-01 05-01    32.8
3043 1993     5   1 23.3 29.8 17.6 1993-05-01 05-01    32.8
3408 1994     5   1 25.0 30.8 20.0 1994-05-01 05-01    32.8
122  1985     5   2 22.3 29.1 18.0 1985-05-02 05-02    32.8
487  1986     5   2 24.3 30.7 18.8 1986-05-02 05-02    32.8
852  1987     5   2 25.1 32.0 19.4 1987-05-02 05-02    32.8

我试过这个,但它没有包含居中日的所有10个值

df$MPerMAX2=rollapply(df$MAX,width=150,FUN="quantile",p=.9, fill = NA)

也尝试了这个,但仍然无法正常工作

{{1}}

为了解决这个问题,我使用了160天(中心日的150 + 10d)。但是对于5月2日和以后的日期,该功能只会从双方移动1个数据点(天)。即,从4月25日(使用10中的一个值)到5月9日(使用10中的一个值)的天数将用于计算不正确的百分位数。 所以我正在寻找一种方法,该函数将移动10个数据点而不是1个。 请帮忙。

0 个答案:

没有答案