首页 文章

如何将每日 Value 汇总限制为月度和年度总计?

提问于
浏览
0

我有一个动物园对象(stn)的每日数据的长记录(日期Vs下雨) . 我用过hydoTSM包

(m < - daily2monthly(stn,FUN = sum,na.rm = TRUE))

这工作正常,但我想只允许聚合几个月,至少20个每日记录 . 对于年度,应提供至少10个月的记录 . 任何人都可以建议一个更好的方法吗?

1 回答

  • 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
    

相关问题