2013-12-13 62 views
0

我有一個動物園對象(stn)的長日誌數據記錄(日期Vs雨)。我已經使用hydoTSM包如何將每日價值彙總限制爲月和年總計?

(M < - daily2monthly(STN,FUN =總和,na.rm = TRUE))

其工作正常,但我想允許聚合僅適用於日常記錄在至少20個月。每年至少應有10個月的記錄。任何人都可以提出一個更好的方法來做到這一點?

回答

0

以下是一種方法,如果使用plyr是一個選項。您必須將動物園對象stn放入數據框中。

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 
rain$Month <-1+as.POSIXlt(rain$date)$mon 
rain$Day <-as.POSIXlt(rain$date)$mday 

annualAgg <- function(df) { 
    if(length(unique(df$Month))<10) return(NULL) #aggregate only if <10 months in that year 
    mean(df$pcp) 
} 

monthlyRainAgg <- function(df) { 
    if(length(unique(df$Day))<20) return(NULL) #aggregate monthly only if <20 days in that month 
    mean(df$pcp) 
} 

library(plyr) 
## Call the functions above using ddply 
# ddply sends the functions thinly sliced df's 
monthly.agg.df <- ddply(rain, .(Year, Month), monthlyRainAgg) 
monthly.agg.df 

annual.agg <- ddply(rain, .(Year), annualAgg) 
annual.agg