R/BD_sample.R

Defines functions BD_sample

Documented in BD_sample

#' Extraction aléatoire des observations
#'
#' Permet d'extraire une proportion d'observations à partir des valeurs uniques d'une variable.
#'
#' \strong{\code{n}} : Si \code{n} est plus grand que 1 et que le nombre de valeurs unique est plus petit que \code{n}, \code{n} prend comme valeur le nombre de valeurs uniques.
#'
#' @param x Base de données
#' @param by CHARACTER. Variable où l'on sélectionne la portion des observations.
#' @param n NUMERIC. Si entre 0 et 1, sélection de la proportion \code{n} des valeurs uniques de la colonne \code{by}, puis sélection des observations possédant ces valeurs dans la colonne \code{by}; Si 1 ou plus, sélection de \code{n} valeurs parmi les valeurs uniques de \code{by}, puis sélection des observations possédant ces valeurs dans la colonne \code{by}.
#'
#' @import data.table
#' @export
BD_sample <- function(x, by, n){

  ## Arrangement BD
  # Convertir en data.table
  x <- as.data.table(x)
  # Changer nom
  setnames(x, by, "xbyx")


  ## Sélectionner un échantillon selon la méthode
  if (n < 1) { #fraction du tableau initial

    # Nombre de 'by' à extraire
    nby <- ceiling(length(unique(x[["xbyx"]])) * n) #arrondi supérieur
    if(nby > length(unique(x[["xbyx"]]))) nby <- length(unique(x[["xbyx"]])) #protection s'il n'y a pas assez d'observations

    # Liste aléatoire des 'by' à extraire
    list <- sort(sample(unique(x[["xbyx"]]), nby))

  } else { #nombre défini d'observations ayant les valeurs 'by'

    # Nombre de 'by' à extraire
    nby <- n
    if(nby > length(unique(x[["xbyx"]]))) {nby <- length(unique(x[["xbyx"]]))} #protection s'il n'y a pas assez d'observation

    # Liste aléatoire des 'by' à extraire
    list <- sort(sample(unique(x[["xbyx"]]), nby))

    }


  ## Tableau avec les valeurs de frac
  x <- x[xbyx %in% list]


  ## Modifier nom
  # Reprendre nom initial
  setnames(x, "xbyx", by)


  ## Résultat final
  x

}
INESSSQC/polymedic documentation built on May 7, 2019, 2:26 p.m.