我拥有50多年的每日数据。我需要使用每日数据的平均值生成一个新的数据集,每天应取平均值 包括过去10年和未来10年的每日数据。
这是一个可复制的示例。我有1998年至2008年的时间,还有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。对于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
")
答案 0 :(得分:0)
首先创建一个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")
中的日期进行分组。
http-proxy my.VPS.IP.server 8080
http-proxy-option CUSTOM-HEADER X-Online-Host custom.website
http-proxy-option CUSTOM-HEADER Host custom.website