【发布时间】:2020-03-02 07:05:15
【问题描述】:
我有超过 50 年的每日数据。我需要生成一个包含每日数据平均值的新数据集。对于每一天,应该取平均值 包括过去 10 年和未来 10 年的每日数据。
这是一个可重现的示例。我从 1998 年到 2008 年有几年,二月和三月有 10 天。我需要做的是将 T1 和 T2 的新平均列分别计算为 T1avg 和 T2avg。需要计算每日平均值,以便它包含过去 4 年和未来 4 年的数据。对于 1998-2001 年和 2005-2008 年的平均作物 df,因为这些年份在之前或之后的 4 年都没有足够的数据。
例如 2002 年 2 月 28 日。如果 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。对于 2004 年 2 月 29 日,我只会平均 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
")
【问题讨论】:
-
这听起来像是移动平均线。你试过搜索吗?
标签: r