R/exclus.R

#' Données à exclure
#'
#' Sélectionne les observations qui ne respectent pas les critères.
#'
#' La base de données \code{x} doit contenir \strong{uniquement} les colonnes nécessaires à l'exclusion.
#'
#' @param x Base de données d'analyse.
#' @param ... Critères d'inclusion à inscrire sous la forme : \code{nomColonne = nombre}. Les critères peuvent être insérés dans une liste.
#' @param filter Détermine l'opérateur logique des critères : "<=", "<", ">" ou ">=".
#' @param cols Facultatif. Nom des colonnes nécessaires à l'exclusion. S'il n'est pas défini, \code{by} aura pour valeur les colonnes existantes dans \code{x}.
#' @param table TRUE si on veut le tableau résultat, FALSE renvoie les combinaisons uniques des colonnes qui ne sont pas dans les critères
#'
#' @return data.table ou vecteur indiquant les codes exclus.
#'
#' @import data.table
#' @export
#' @examples
#' DT <- data.frame(Annee = rep(c(2014, 2015), each = 15),
#'                  Code = rep(rep(1:3, each = 5), 2),
#'                  Region = rep(1:5, 6),
#'                  obs = c(10,20,30,40,50,20,30,40,50,60,
#'                          40,50,60,70,80, 0, 5,10,15,20,
#'                           5,10,15,20,25,10,15,20,25,30))
#' exclus(DT, obs = 20)  # 1 critère
#' exclus(DT, obs = 20, Region = 3)  # 2 critères
#' exclus(DT, obs = 20, Region = 3, Code = 3)  # 3 critères
#'
#' # Sélection des colonnes avec 'cols'
#' exclus(DT, obs = 30, cols = c("Annee", "Code", "obs"))
#'
#' # Choix d'exclusion, ">=" vs "<"
#' exclus(DT, obs = 20, Region = 3, filter = ">=")
#' exclus(DT, obs = 20, filter = "<")
#'
#' # table = FALSE vs TRUE
#' exclus(DT, obs = 20, Region = 3, table = TRUE)
#' exclus(DT, obs = 20, Region = 3, table = FALSE)
exclus <- function(x, ..., filter = ">=", cols = NULL, table = TRUE){

  #### Verification
  ArgCheck()
  if(!is.data.frame(x)) addError("'x' n'est pas de type DATA.FRAME.", argcheck)
  finishArgCheck(argcheck)
  if(!is.null(cols)){
    if(any(!cols %in% names(x))) addError("Une valeur de 'cols' n'est pas un nom de colonne de 'x'.", argcheck)
  }
  if(!filter %in% c("<=", "<", ">", ">=")) addError(paste0("La valeur de filter (",filter,") n'est pas une valeur permise.", argcheck))
  if(!is.logical(table)) addError("'table' doit être de type LOGICAL.", argcheck)
  
  
  #### Code ####
  dt <- as.data.table(x)
  if(is.null(cols)) cols <- names(dt) else dt <- dt[, ..cols]

  if(filter == "<="){
    filter <- ">"
  } else if(filter == "<"){
    filter <- ">="
  } else if(filter == ">"){
    filter <- "<="
  } else if(filter == ">="){
    filter <- "<"
  } else {
    stop("'filter' peut prendre les valeurs suivantes : '<', '<=', '>', '>='.")  # message d'erreur
  }
  dt <- inclus(x, ..., filter = filter, cols = cols, table = table)
  dt

}
INESSSQC/INESSS documentation built on May 4, 2019, 4:14 a.m.