Skip to content

Instantly share code, notes, and snippets.

@juba
Last active December 11, 2015 05:49
Show Gist options
  • Save juba/4555252 to your computer and use it in GitHub Desktop.
Save juba/4555252 to your computer and use it in GitHub Desktop.
Fonction R pour le tri à plat "combiné" d'une série de variables binaires
## Fonction pour le tri à plat "combiné" d'une série de variables binaires
## Arguments :
## - df : data frame
## - varnames : vecteur contenant le nom des variables binaires
## - true.codes : liste contenant des valeurs supplémentaires considérées comme "vraies"
## (par défaut TRUE et 1 sont considérées comme vraies)
## - weights: nom de la variable de pondération des lignes (facultatif)
table.multi <- function(df, varnames, true.codes=NULL, weights=NULL) {
true.codes <- c(as.list(true.codes), TRUE, 1)
as.table(sapply(df[,varnames], function(v) {
sel <- as.numeric(v %in% true.codes)
if (!is.null(weights)) sel <- sel * df[,weights]
sum(sel)
}))
}
## Fonction pour le tri croisé d'un facteur et d'une série de variables binaires
## Arguments :
## - df : data frame
## - varnames : vecteur contenant le nom des variables binaires
## - crossvar : facteur pour le croisement
## - ... : les arguments restants sont passé à table.multi()
table.multi.croise <- function(df, varnames, crossvar, ...) {
tmp <- factor(crossvar)
simplify2array(by(d, tmp, table.multi, varnames, ...))
}
## Exemple de données
sexe <- sample(c("Homme","Femme"),100,replace=TRUE)
jazz <- sample(c(0,1),100,replace=TRUE)
classique <- sample(c(TRUE, FALSE),100,replace=TRUE)
bd <- sample(c("O","N"),100,replace=TRUE)
poids <- runif(100)*2
d <- data.frame(sexe,jazz,bd,classique,poids)
## Exemple de tableau
table.multi(d, c("jazz", "classique","bd"), true.codes=list("O","Oui"))
## Exemple de tableau avec pondération
table.multi(d, c("jazz", "classique","bd"), true.codes=list("O","Oui"), weights="poids")
## Exemple de tableau croisé
table.multi.croise(d, c("jazz", "classique","bd"), d$sexe, true.codes=list("O","Oui"), weights="poids")
table.multi.croise(d, c("jazz", "classique","bd"), d$sexe, true.codes=list("O","Oui"), weights=NULL)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment