R/utils.R

Defines functions date.format is.date find.dates dates.periode

#' @export

dates.periode <- function(vecdate){
  require(lubridate)
  require(dplyr)
# Fonction qui mesure les intervals de date et défini si l'interval est mensuel, annuel, trimestriel et constant
  dates <- as.Date(as.character(vecdate),format=date.format(vecdate))
  if (is.na(dates)) {
    cat('Transformation des dates')
    dates <- as.Date(as.character(vecdate),format="%d.%m.%Y")

  }

  inter <- c()
  for (prem in seq(length(dates) -1)) {
    sec = prem + 1
    # vecteur d'interval de date
    inter <- c(inter, unique(sort(dates))[sec]-unique(sort(dates))[prem] )


  }

  medin <- median(inter, na.rm = T)
  meanin <- mean(inter, na.rm = T)
  maxin <- max(inter, na.rm = T)
  minin <- min(inter, na.rm = T)


  constance <- case_when(abs((meanin - medin) / medin) < 0.05 ~ "Ecart de date constant",
                         abs((meanin - medin) / medin) > 0.05  ~ "Ecart de date variable"

  )

  period <- case_when( 29 <= meanin & meanin <= 31  ~ "Données mensuelles",
                       1 == meanin  ~ "Données quotidienne",
                       360 <= meanin & meanin <= 366  ~ "Données annuelles",
                       88 <= meanin & meanin <= 95  ~ "Données trimestrielles",
                       TRUE ~ 'Aucune périodicité')


return(c(constance,period))
}

find.dates <- function(df){
  dates.found = c()

  for (col in colnames(df)) {
    if (class(df[,col]) %in% c('Date','character')) {
      if(is.date(df[,col]) == T){
        dates.found <- c(dates.found, col)
      }
    }
  }
return(dates.found)


}

is.date <- function(string){
  dixok = F
  nbchiffre = F
  string <- as.character(string)
  x <- string[1]
  i = 1
  n = 0
  while(string[i] == ''){
    n = i+1
    i = i + 1
  }
  if (n != 0) {
    x <- string[n]
  }
  if (nchar(x) == 10) {
    dixok = T
  }
  if (nchar(gsub(x ,pattern = '[^0-9]',replacement = "")) == 8) {
    nbchiffre = T
  }
if (dixok == T & nbchiffre == T) {
  return(T)
}else
  return(F)
}

date.format <- function(stringdate){
  stringdate <- as.character(stringdate)
  x <- gsub(stringdate[1] ,pattern = '[0-9]',replacement = "")
  i = 1
  n = 0
  while(stringdate[i] == ''){
    n = i+1
    i = i + 1
  }
  if (n != 0) {
    x <- gsub(stringdate[n] ,pattern = '[0-9]',replacement = "")
  }
  if (x == '..') {
    dateformat = '%d.%m.%Y'
  }else if (x == '//') {
    dateformat = '%Y/%m/%d'
  }else if (x == '--') {
    dateformat = '%Y-%m-%d'
  }else{
    dateformat = 'Unknown'
  }

  return(dateformat)
}
JonasPipoz/retlstat documentation built on March 29, 2024, 7:43 p.m.