R/time_agpar.R

#' Hobo Aggregate Parameters
#'
#' Calculate aggregates parameter values from a "hobo.data.frame".
#'
#' @param data An object of class "data.frame" containing a column with Dates and another with Temperatures values.
#' @param Dcol An integer indicating the column which contains Dates
#' @param Pcol An integer indicating the column wiich contains Parameter values
#' @param resolution One of \code{"day"}, \code{"month"}, \code{"week"} or \code{"year"}
#' character string which define the aggregation level..
#' @return an object of class "data.frame" containing aggregate parameters
#' @import stringr
#'
#' @author Remy Moine <remymoine95@gmail.com>
#' @export


time_agpar<-function(data,Dcol,Pcol,resolution){

  if(resolution=="month"){
    Ti<-unique(stringr::str_extract(data[,Dcol],"^[:digit:]{4}-[:digit:]{2}"))
    Year<-stringr::str_extract(Ti,"^[:digit:]{4}")
    Month<-stringr::str_extract(Ti,"[:digit:]{2}$")
    Day<-rep("01",length(Ti))
    Date<-unique(lubridate::as_date(
      as.character(
        paste(Year,Month,Day,sep="-")
      )
    ))
    } else {
    if (resolution=="day"){
      Ti<-unique(stringr::str_extract(data[,Dcol],"^[:digit:]{4}-[:digit:]{2}-[:digit:]{2}"))
      Year<-stringr::str_extract(Ti,"^[:digit:]{4}")
      Month<-stringr::str_extract(Ti,"(?<=[:digit:]{4}-)[:digit:]{2}")
      Day<-lubridate::yday(as.Date(Ti))
      Date<-unique(lubridate::as_date(
        stringr::str_extract(data[,Dcol],"^[:digit:]{4}-[:digit:]{2}-[:digit:]{2}"))
      )
      } else{
        if (resolution=="year"){
          Ti<-unique(stringr::str_extract(data[,Dcol],"^[:digit:]{4}"))
          Year<-Ti
          Month<-rep("01",length(Ti))
          Day<-rep("01",length(Ti))
          Date<-unique(lubridate::as_date(
            as.character(
              paste(Year,Month,Day,sep="-")
            )
          ))}}}

  Mi<-NA
  Q1<-NA
  Me<-NA
  Av<-NA
  Q3<-NA
  Ma<-NA
  Su<-NA
  Amp<-NA

  for (i in c(1:length(Ti))){
    sel<-which(as.character(stringr::str_detect(data[,Dcol],Ti[i]))==T)
    Mi[i]<-summary(stats::na.omit(data[sel,Pcol]))[1]
    Q1[i]<-summary(stats::na.omit(data[sel,Pcol]))[2]
    Me[i]<-summary(stats::na.omit(data[sel,Pcol]))[3]
    Av[i]<-summary(stats::na.omit(data[sel,Pcol]))[4]
    Q3[i]<-summary(stats::na.omit(data[sel,Pcol]))[5]
    Ma[i]<-summary(stats::na.omit(data[sel,Pcol]))[6]
    Su[i]<-sum(stats::na.omit(data[sel,Pcol]))
    Amp[i]<-Ma[i]-Mi[i]
  }
  objet<-data.frame(Date=as.POSIXct(Date),Year=as.integer(Year),Month=as.integer(Month),
                    Day=as.integer(Day),Mi,Q1,Me,Av,Q3,Ma,Su,Amp,stringsAsFactors = F)
  objet
}
remymoine/PTS-R-package documentation built on May 16, 2019, 5:03 a.m.