#' 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
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.