应用滚动四分位数并在R中跳过?
我有以下10年的天气数据,其中每个日期有10个值(10y*1d)。我一直在做的是,每15天日历窗口使用居中移动的百分位数计算第90个百分位数(最高和最低温度)。例如,对于5月1日,第90百分位将从4月24日至5月8日计算。然后5月2日将使用4月25日至5月9日的数据。因此,对于我的数据,我必须使用150(10y*15d)的窗口,因为我每天有10个值应用滚动四分位数并在R中跳过?,r,R,我有以下10年的天气数据,其中每个日期有10个值(10y*1d)。我一直在做的是,每15天日历窗口使用居中移动的百分位数计算第90个百分位数(最高和最低温度)。例如,对于5月1日,第90百分位将从4月24日至5月8日计算。然后5月2日将使用4月25日至5月9日的数据。因此,对于我的数据,我必须使用150(10y*15d)的窗口,因为我每天有10个值 head(df,50) YEAR MONTH DAY MEAN MAX MIN Data2 MD 114 1985
head(df,50)
YEAR MONTH DAY MEAN MAX MIN Data2 MD
114 1985 4 24 20.0 25.9 13.8 1985-04-24 04-24
479 1986 4 24 22.0 28.6 16.0 1986-04-24 04-24
844 1987 4 24 23.9 30.0 18.5 1987-04-24 04-24
1210 1988 4 24 23.1 28.0 17.2 1988-04-24 04-24
1575 1989 4 24 22.8 28.0 16.7 1989-04-24 04-24
1940 1990 4 24 17.9 23.4 10.5 1990-04-24 04-24
2305 1991 4 24 24.4 32.0 17.8 1991-04-24 04-24
2671 1992 4 24 23.8 29.8 18.8 1992-04-24 04-24
3036 1993 4 24 23.5 28.4 19.2 1993-04-24 04-24
3401 1994 4 24 23.5 30.0 15.0 1994-04-24 04-24
115 1985 4 25 21.3 28.1 15.0 1985-04-25 04-25
480 1986 4 25 22.0 26.7 18.2 1986-04-25 04-25
845 1987 4 25 24.3 30.4 19.0 1987-04-25 04-25
1211 1988 4 25 21.7 26.4 17.4 1988-04-25 04-25
1576 1989 4 25 23.0 28.0 17.0 1989-04-25 04-25
1941 1990 4 25 15.3 22.7 11.2 1990-04-25 04-25
2306 1991 4 25 25.2 33.0 20.0 1991-04-25 04-25
2672 1992 4 25 23.2 28.4 19.8 1992-04-25 04-25
3037 1993 4 25 22.7 27.4 19.7 1993-04-25 04-25
3402 1994 4 25 22.8 30.0 15.0 1994-04-25 04-25
116 1985 4 26 21.4 28.0 16.5 1985-04-26 04-26
481 1986 4 26 21.3 26.4 18.1 1986-04-26 04-26
846 1987 4 26 24.7 31.0 20.6 1987-04-26 04-26
1212 1988 4 26 21.1 26.5 14.0 1988-04-26 04-26
1577 1989 4 26 21.5 28.0 16.5 1989-04-26 04-26
1942 1990 4 26 15.7 21.5 9.8 1990-04-26 04-26
2307 1991 4 26 25.7 32.8 20.0 1991-04-26 04-26
2673 1992 4 26 22.6 27.0 17.6 1992-04-26 04-26
3038 1993 4 26 22.0 26.0 19.0 1993-04-26 04-26
3403 1994 4 26 23.3 29.6 18.5 1994-04-26 04-26
117 1985 4 27 21.5 28.0 16.0 1985-04-27 04-27
482 1986 4 27 20.0 26.5 15.0 1986-04-27 04-27
847 1987 4 27 24.5 30.4 20.0 1987-04-27 04-27
1213 1988 4 27 23.4 28.3 14.0 1988-04-27 04-27
1578 1989 4 27 19.8 27.7 15.0 1989-04-27 04-27
1943 1990 4 27 12.3 16.4 10.0 1990-04-27 04-27
2308 1991 4 27 25.8 32.8 19.0 1991-04-27 04-27
2674 1992 4 27 22.0 28.4 15.6 1992-04-27 04-27
3039 1993 4 27 19.6 24.2 16.2 1993-04-27 04-27
3404 1994 4 27 25.0 31.6 19.0 1994-04-27 04-27
118 1985 4 28 21.4 31.1 16.0 1985-04-28 04-28
483 1986 4 28 19.7 25.9 15.0 1986-04-28 04-28
848 1987 4 28 24.6 32.8 18.0 1987-04-28 04-28
1214 1988 4 28 24.8 29.4 15.2 1988-04-28 04-28
1579 1989 4 28 23.1 28.4 14.0 1989-04-28 04-28
1944 1990 4 28 17.9 23.2 8.2 1990-04-28 04-28
2309 1991 4 28 26.2 32.0 19.0 1991-04-28 04-28
2675 1992 4 28 23.3 28.6 16.0 1992-04-28 04-28
3040 1993 4 28 19.1 24.2 14.0 1993-04-28 04-28
3405 1994 4 28 23.9 32.2 17.2 1994-04-28 04-28
我已经试过了,但它没有包括当天的所有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
我用了160天(中心日的150+10天)来处理这个问题。但对于5月2日及以后的日期,函数将仅从两侧移动1个数据点(天)。即,从4月25日(使用10中的一个值)到5月9日(使用10中的一个值)的天数将用于计算不正确的百分位数。
因此,我正在寻找一种方法,使函数移动10个数据点,而不是一个。
请帮忙 请看
by=
的rollapply
参数。谢谢,这就是我要找的。您是否知道如何用相应的值填充NA,即所有May-1行获得相同的值,而不是一个值,另一个NAI不清楚您想做什么,但如果要将非NAs转入NAs占用的位置,请参见zoo软件包中的NA.locf
。谢谢,但是我做到了,我得到了1.000看看by=
参数到rollapply
。谢谢,这就是我想要的。您是否知道如何用相应的值填充NA,即所有May-1行获得相同的值,而不是一个值,另一个NAI不清楚您想做什么,但如果要将非NAs转入NAs占据的位置,请参见zoo软件包中的NA.locf
。谢谢,但我做到了,我得到了1.000
df$MPerMAX2=rollapply(df$MAX,width=150,FUN="quantile",p=.9, fill = NA)