droplevels() ou comment se débarrasser efficacement de niveaux de facteurs inutilisés


jdd <- data.frame(deslettres=letters[1:10],
                  desnombres=seq(1:10),
                  desfacteurs=c(rep("oui",5), rep("non", 5)))

levels(jdd$deslettres)
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
# il y a 10 niveaux pour la variable qualitative "deslettres"

# en filtrant sur les nombres....
library(dplyr)
unextrait<-filter(jdd,desnombres > 5)
levels(unextrait$deslettres)
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
# ...le nouveau jeu de données garde les anciens noms de niveaux de "deslettres"

Pour s’en débarrasser, depuis R 2.12.0, la fonction droplevels() rend cette opération aisée…



# ...sur tout le jeu de données : 
droplevels(unextrait)
summary(unextrait)


# ...sur une variable en particulier :
droplevels(unextrait$deslettres)
summary(unextrait)

# ...sur tout le jeu de données sauf celle mentionnées dans l'argument except :
droplevels(unextrait, except="desfacteurs")