R语言 六个月旺季移动平均值

vfh0ocws  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(137)

我正在尝试实现this
建议的旺季臭氧AQG水平为60微克/立方米(每日最高八小时平均臭氧浓度的平均值)。旺季的定义是一年中连续六个月录得最高的六个月连续平均臭氧浓度。在赤道以外的地区,这一时期通常是一个日历年内的暖季(北半球)或跨越两个日历年(南半球)。靠近赤道,这种清晰的季节性模式可能不明显,但通常可从现有的监测或模拟数据中确定一个连续平均6个月的高峰期。
我有:

# A tibble: 300 × 2
   date                value
   <dttm>              <dbl>
 1 1997-01-01 00:00:00 NA   
 2 1997-02-01 00:00:00 NA   
 3 1997-03-01 00:00:00 NA   
 4 1997-04-01 00:00:00 30.2 
 5 1997-05-01 00:00:00 20.9 
 6 1997-06-01 00:00:00 10.1 
 7 1997-07-01 00:00:00  9.40
 8 1997-08-01 00:00:00 22.4 
 9 1997-09-01 00:00:00 26.2 
10 1997-10-01 00:00:00 32.9 
# … with 290 more rows

每一年都是完整的(有或没有NA)。我通过"findpeaks"从prama包中找到了峰值,并得到:

peaks = findpeaks(mda8_omit$value, minpeakdistance = 6, 
                  minpeakheight = mean(mda8_omit$value))

我如何优化以获得最佳的六个月高峰?北半球是比较容易的,因为高峰是在一年(夏季),但在南半球是分裂在两年和高峰可能会改变取决于纬度。任何想法如何继续?

mec1mxoz

mec1mxoz1#

假设

  • 我们仅使用具有连续6个月数据的窗口
  • 窗口福尔斯的年份由窗口的最后一个月确定
  • 我们比较每个日历年内的所有此类窗口,最多12个

计算滚动平均值,然后按年分组,取一年内滚动平均值最大的行。该行是6个月窗口的最后一个月。输入值在末尾的注解中重复显示。

library(dplyr)
library(zoo)

DF %>%
  mutate(date = as.yearmon(date), 
         peakmean = rollapplyr(value, 6, mean, fill = NA)) %>%
  group_by(year = as.integer(date)) %>%
  slice_max(peakmean) %>%
  ungroup %>%
  select(-year)
## # A tibble: 1 × 3
##   date      value peakmean
##   <yearmon> <dbl>    <dbl>
## 1 Oct 1997   32.9     20.3

注解

Lines <- "date                value
 1 1997-01-01T00:00:00 NA   
 2 1997-02-01T00:00:00 NA   
 3 1997-03-01T00:00:00 NA   
 4 1997-04-01T00:00:00 30.2 
 5 1997-05-01T00:00:00 20.9 
 6 1997-06-01T00:00:00 10.1 
 7 1997-07-01T00:00:00  9.40
 8 1997-08-01T00:00:00 22.4 
 9 1997-09-01T00:00:00 26.2 
10 1997-10-01T00:00:00 32.9"

DF <- read.table(text = Lines)

相关问题