У меня есть ежедневные данные за 50 лет. Мне нужно сгенерировать новый набор данных с усредненными значениями ежедневных данных. Для каждого дня среднее значение следует принимать как включающее ежедневные данные за последние 10 лет и будущие 10 лет.
Вот воспроизводимый пример. У меня годы 1998-2008 и 10 дней месяцев февраль и март. Что мне нужно сделать, так это вычислить новые усредненные столбцы T1 и T2 как T1avg и T2avg соответственно. Среднесуточное значение должно быть рассчитано таким образом, чтобы оно включало данные за последние 4 и последующие 4 года. Для усреднения урожая по df за 1998-2001 и 2005-2008 гг. С тех лет не будет достаточно данных за 4 года до или после.
Например, за 28 февраля 2002 г. Мне нужно усреднить значения, если T1 иT2 за дни 02/28 / 1998,02 / 28 / 1999,02 / 28 / 2000,02 / 28 / 2001,02 / 28 / 2002,02 / 28 / 2003,02 / 28 / 2004,02 / 28/2005, 02 / 28/2006. Для 29 февраля 2004 года я бы просто усреднил 02/29 / 200,02 / 29 / 2004,02 / 29/2008.
Я пробовал sqldf. Я могу делать ежедневные средние оценки, но не могу понять, как вычислить среднее значение по условию для года, где год находится между 4 и 4 годами.
#Generate data
df<-as.data.frame(cbind(year=rep(1998:2008,each=20),
month=c(rep(2:3,each=10),rep(2:3,each=10),rep(2:3,each=10),
rep(2:3,each=10),rep(2:3,each=10),rep(2:3,each=10),
rep(2:3,each=10),rep(2:3,each=10),rep(2:3,each=10),
rep(2:3,each=10),rep(2:3,each=10)),
day=c(19:28,1:10,19:28,1:10,20:29,1:10,
19:28,1:10,19:28,1:10,19:28,1:10,
20:29,1:10,19:28,1:10,19:28,1:10,
19:28,1:10,20:29,1:10),
T1=rnorm(220),
T2=rnorm(220)))
##################### Среднесуточные данные ########################
sqldf("
select
month,
day,
year,
T1,
T2,
avg(T1) as T1_avg
,avg(T2) as T2_avg
from df
group by
month, day
")