0
我有一個動物園對象(stn)的長日誌數據記錄(日期Vs雨)。我已經使用hydoTSM包如何將每日價值彙總限制爲月和年總計?
(M < - daily2monthly(STN,FUN =總和,na.rm = TRUE))
其工作正常,但我想允許聚合僅適用於日常記錄在至少20個月。每年至少應有10個月的記錄。任何人都可以提出一個更好的方法來做到這一點?
我有一個動物園對象(stn)的長日誌數據記錄(日期Vs雨)。我已經使用hydoTSM包如何將每日價值彙總限制爲月和年總計?
(M < - daily2monthly(STN,FUN =總和,na.rm = TRUE))
其工作正常,但我想允許聚合僅適用於日常記錄在至少20個月。每年至少應有10個月的記錄。任何人都可以提出一個更好的方法來做到這一點?
以下是一種方法,如果使用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