Home > Net >  Six-month peak-season running average
Six-month peak-season running average

Time:12-30

I'm trying to implement peaks in series

How do i optimize to get the best six month by peak? For northern hemisphere is easier because the peaks is within a yer (summer) but in the southern hemisphere is split in two years and peaks may change depending on latitude. Any ideas on how to continue?

CodePudding user response:

Assuming that

  • we only use windows with 6 consecutive months of data
  • the year that a window falls is determined by the last month of the window
  • we compare all such windows, at most 12, within each calendar year

Calculate the rolling mean and then grouping by year take the row with the largest rolling mean within year. This row is the last month of the 6 month window. The input is shown reproducibly in the Note at the end.

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

Note

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)
  •  Tags:  
  • r
  • Related