R: удалить високосный день, рассчитав среднее значение с предыдущим днем

У меня есть временной ряд, подмножеством которого является следующее:

structure(list(Date = structure(c(16851, 16852, 16853, 16854, 
16855, 16856, 16857, 16858, 16859, 16860), class = "Date"), BAL = c(4.38212529123126, 
6.2362101768993, 7.58042025123348, 1.28668112319138, 0.394057913904365, 
0.223231297328036, -0.677870337868538, -0.803250821089761, -0.812567723037268, 
-0.586754184659877)), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame"))

Чтобы иметь одинаковое количество дней в каждом году, мне нужно удалить 29 февраля. Я мог бы легко сделать это:

library(lubridate, dplyr)
filter(x, !(month(Date) == 2 & day(Date) == 29))

Но тогда я потерял бы измеренную информацию того дня. Моя идея состоит в том, чтобы заменить измерение 28 февраля средним значением 28 и 29 февраля, но я понятия не имею, как это сделать. Обратите внимание, что мой исходный временной ряд намного длиннее и состоит из нескольких лет измерений.


person Felix Phl    schedule 12.08.2020    source источник
comment
Почему вы хотите, чтобы одинаковое количество дней в каждом году?   -  person Hugh    schedule 12.08.2020
comment
@Hugh Я рассчитываю эмпирическое распределение в день в течение нескольких лет.   -  person Felix Phl    schedule 12.08.2020


Ответы (1)


Может быть, вы можете попробовать базовый код R ниже

idx <- with(df,which(format(Date,"%m-%d")=="02-29"))
within(df,BAL <- replace(BAL,idx-1,mean(BAL[idx+(-1:0)])))[-idx,]

который дает

  Date          BAL
  <date>      <dbl>
1 2016-02-20  4.38
2 2016-02-21  6.24
3 2016-02-22  7.58
4 2016-02-23  1.29
5 2016-02-24  0.394
6 2016-02-25  0.223
7 2016-02-26 -0.678
8 2016-02-27 -0.803
9 2016-02-28 -0.700
person ThomasIsCoding    schedule 12.08.2020