2013-12-13 2 views
0

У меня есть объект зоопарка (stn) длинных записей ежедневных данных (дата Vs rain). Я использовал hydoTSM ПакетКак ограничить агрегирование ежедневной стоимости на ежемесячные и годовые суммы?

(м < - 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 
Смежные вопросы