每日气候数据的季节性摘要

时间:2014-03-17 03:51:38

标签: r aggregate plyr zoo

我正在寻找每日时间序列的季节性摘要。 我有来自许多电台的每日时间序列气候数据,格式如下。

head(df)
        Date     ID  Ele Aspect  Tmin  Tmax Prcp
1 1970-01-01 crb200 1283   West -13.3  -2.8    0
2 1970-01-02 crb200 1283   West -12.2  -5.6    1
3 1970-01-03 crb200 1283   West -15.0  -6.1    0
4 1970-01-04 crb200 1283   West -20.0 -10.0    0
5 1970-01-05 crb200 1283   West -19.4  -6.7    0
6 1970-01-06 crb200 1283   West -16.1  -5.6    0

长数据框df为here。这是一年的数据作为季节性摘要的示例。

我可以使用ddply将其汇总为每月(和每年),如下所示。

df$Date<-as.Date(df$Date, format="%Y-%m-%d",tz='GMT')
df.m<-ddply(df,.(Date=format(Date,"%Y-%b")),here(summarise),
               ID=(df[2,2]),
               Ele=(df[2,4]),
               Aspect=(df[2,5]),
               Prcp.m = sum(Prcp, na.rm=F),
               Tmin.m = mean(Tmin, na.rm=F),
               Tmax.m = mean(Tmax, na.rm=F))
print(summary(df.m))

我正在尝试为每年的每个季节执行类似的摘要。我想要总降水量和平均每年4个季节的最低和最高温度。

有没有办法可以使用ddply实现这一目标?如果不是我怎么能这样做? 谢谢。

3 个答案:

答案 0 :(得分:1)

查找表如何 - 如果您的数据是南半球,请将season.N更改为season.S

seasons<-data.frame(month=c("Dec","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov"),
           season.N=rep(c("Winter","Spring","Summer","Fall"),each=3),
           season.S=rep(c("Summer","Fall","Winter","Spring"),each=3))

df.s<-ddply(df,.(season=seasons[seasons$month==format(Date,"%b"),"season.N"]),here(summarise),
            ID=(df[2,2]),
            Ele=(df[2,4]),
            Aspect=(df[2,5]),
            Prcp.m = sum(Prcp, na.rm=F),
            Tmin.m = mean(Tmin, na.rm=F),
            Tmax.m = mean(Tmax, na.rm=F))

答案 1 :(得分:0)

我发现在动物园包的帮助和ddply的使用下,这可以实现。 代码如下。这是以前代码的延续。

df.s<-ddply(df.m,.(sea=(format(as.yearqtr(as.yearmon(df$Date, "%Y-%b") + 1/12)))),here(summarise),
                   ID=(df[2,2]),
                   Ele=(df[2,4]),
                   Aspect=(df[2,5]),
                   Prcp.sea = sum(Prcp.m, na.rm=F),
                   Tmin.sea = mean(Tmin.m, na.rm=F),
                   Tmax.sea = mean(Tmax.m, na.rm=F))
print(summary(dataframe.s))

答案 2 :(得分:-1)

您也可以使用Seas包来获得结果。