我有一个动物园对象(stn)的每日数据的长记录(日期Vs下雨) . 我用过hydoTSM包
(m < - daily2monthly(stn,FUN = sum,na.rm = TRUE))
这工作正常,但我想只允许聚合几个月,至少20个每日记录 . 对于年度,应提供至少10个月的记录 . 任何人都可以建议一个更好的方法吗?
如果使用 plyr 是一个选项,这是一种方法 . 您必须将动物园对象 stn 设置为数据框 .
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
1 回答
如果使用 plyr 是一个选项,这是一种方法 . 您必须将动物园对象
stn
设置为数据框 .