R 计算特定时间段的日平均值

R 计算特定时间段的日平均值,r,R,我有50多年的每日数据。我需要用每日数据的平均值生成一个新的数据集。对于每一天,应取平均值 包括过去10年和未来10年的每日数据 这是一个可复制的例子。我从1998年到2008年有10年的时间,2月和3月有10天。我需要做的是将T1和T2的新平均列分别计算为T1avg和T2avg。需要计算日平均值,以便包括过去4年和未来4年的数据。对于1998-2001年和2005-2008年的平均作物df,因为这些年份在之前或之后的4年内没有足够的数据 例如2002年2月28日。我需要对第02/28/1998

我有50多年的每日数据。我需要用每日数据的平均值生成一个新的数据集。对于每一天,应取平均值 包括过去10年和未来10年的每日数据

这是一个可复制的例子。我从1998年到2008年有10年的时间,2月和3月有10天。我需要做的是将T1和T2的新平均列分别计算为T1avg和T2avg。需要计算日平均值,以便包括过去4年和未来4年的数据。对于1998-2001年和2005-2008年的平均作物df,因为这些年份在之前或之后的4年内没有足够的数据

例如2002年2月28日。我需要对第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天的T1和T2进行平均值。对于2004年2月29日,我的平均值为200年2月29日,2004年2月29日,2008年2月29日

我试过sqldf。我可以做每日平均值,但不知道如何通过调节年份计算平均值,其中年份介于第4年和第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)))

首先创建一个
Date
Date
列,然后将数据框左键连接到数据框本身,以便对于第一个实例中的每个日期,
a
,匹配第二个实例中的所有日期,
b
,即4年内的日期。然后按
a
中的日期对
T1
T2
列中的
b
进行分组

library(sqldf)

df2 <- transform(df, date = as.Date(paste(year, month, day, sep = "-")))

df3 <- sqldf("select a.*, avg(b.T1) as avg_T1, avg(b.T2) as avg_T2 from df2 a
  left join df2 b on b.date between a.date - 4*365+1 and a.date + 4*365+1
  group by a.date")
库(sqldf)

这听起来像移动平均线。你试过找那个吗?
library(sqldf)

df2 <- transform(df, date = as.Date(paste(year, month, day, sep = "-")))

df3 <- sqldf("select a.*, avg(b.T1) as avg_T1, avg(b.T2) as avg_T2 from df2 a
  left join df2 b on b.date between a.date - 4*365+1 and a.date + 4*365+1
  group by a.date")