如何列出不同年份的每日最大降雨量值?

时间:2013-12-12 11:30:32

标签: r date time-series plyr zoo

我有每日时间序列数据(日期Vs降雨量)。我想列出每年(27年)的每日最大降雨量。使用which.max,我只能返回整个(27年)时间序列的每日最大降雨量值。任何人都可以建议一个更好的方法吗? 我试过了:

> head(dt)

        date pcp

1 1987-01-01  2

2 1987-01-02  0.6

3 1987-01-03  0

.

.

.

. 2013-12-31  0.6

> dates <- as.Date(dt$date,"%Y/%m/%d")

> rain <- zoo(dt$pcp, dates)

> ndx = which.max(rain) 

> dmax = rain[ndx,]

> dmax

1999-04-05 
     269.2

3 个答案:

答案 0 :(得分:0)

我会建议这样做,但我确信那里更优雅。

dt$yrs <- 1900 + as.POSIXlt(dt$date)$year
dat    <- data.frame(year= sort(unique(dt$yrs)), prc= numeric(length(unique(dt$yrs))))
for(i in 1:nrow(dat)){
  dat$prc[i] <- dt$pcp[which.max(dt[dt$year == dat$year[i], "pcp"])]
}

答案 1 :(得分:0)

aggregate(pcp ~ format(as.Date(date), "%Y"), dt, max)

答案 2 :(得分:0)

ddply真的很喜欢这个。

在Plyr

中使用ddply的解决方案
rain <- data.frame(date=c("1987-01-01", "1987-01-02", "1987-01-03", "1988-10-01", "1988-11-02", "1988-11-01"), 
              pcp=c(2, 0.6, 1, 2.7, 1.1, 1.3)
           )

rain$Year <- 1900+as.POSIXlt(rain$date)$year
library(plyr)
ddply(rain, .(Year), summarize, MaxPcpForYear=max(pcp))

#  Year MaxPcpForYear
# 1 1987           2.0
# 2 1988           2.7