首页 > 解决方案 > 朱利安日期滚动分位数

问题描述

我希望Tmean使用从 1971-2020 年基期开始的 10 天运行窗口计算每个日历日的第 90 个百分位温度 ( )。也就是说,一年中第 1 天的第 90 个百分位数应使用第 361-365 天和第 1-6 天的时间序列计算。但在闰年,它将使用 362-366 天和 2-6 天的时间序列来计算。我已经尝试过这个代码,但它没有做我想要的。请有任何想法。

#Example data
Date= seq(as.Date('1971/01/01'), as.Date('2020/12/31'), by="day")
df= as.data.frame(Date)
df$Tmean= round(runif(nrow(df), min = -16, max = 33),2)

df$DayOfYr <- strftime(df$Date, format = "%j")

library(dplyr)
d= df %>% 
  group_by(DayOfYr) %>%
  summarise (p90th=round(zoo::rollapply(Tmean, width = 10, FUN = quantile, probs= 0.90, 
                                        fill = NA, align = "center"), 2 ))
d[1:14,]
# A tibble: 14 x 2
# Groups:   DayOfYr [1]
   DayOfYr p90th
   <chr>   <dbl>
 1 001      NA  
 2 001      NA  
 3 001      NA  
 4 001      NA  
 5 001      31.3
 6 001      31.3
 7 001      31.3
 8 001      31.3
 9 001      31.3
10 001      31.3
11 001      30.4
12 001      24.6
13 001      23.0
14 001      22.7

预期的输出是这样的

DayOfyr    p90th
  001      31.0
  002      21.7
  003      29.2
  004      32.0
  005      26.8
  ...      ....
  ...      ....
  365      37.8
  366      32.8

标签: r

解决方案


推荐阅读