Étant donné les données factices suivantes:
set.seed(123)
x <- data.frame(let = sample(letters[1:5], 100, replace = T),
num = sample(1:10, 100, replace = T))
y <- subset(x, let != 'a')
Création d'une table de y$let
Rendements
a b c d e
0 20 21 22 18
Mais je ne veux plus que a
s'affiche. Si j'essaye de faire ceci:
levels(y$let) <- factor(y$let)
Je gâche les fréquences, puisque maintenant table(y$let)
me donne
b d c e
0 20 21 40
Je suis conscient que je pourrais faire xtabs(~ y$let, drop.unused.levels = T)
et contourner le problème, mais cela ne réinitialise pas les niveaux variables à sa base (ce qui est important pour moi, car il s'agit d'un changement précoce que j'apporte à l'ensemble de données qui se poursuivra tout au long de l'analyse). De plus, xtabs
est une classe différente de table
, ce qui me donnera des maux de tête plus tard dans le projet.
La question est: comment puis-je changer automatiquement levels(y$let)
pour ne pas afficher les niveaux qui ont été supprimés lorsque j'ai créé le sous-ensemble? Dans ce cas, comment puis-je faire afficher [1] "b" "c" "d" "e"
?
Il y a une fonction récemment ajoutée dans R pour cela:
y <- droplevels(y)
Faites simplement y$let <- factor(y$let)
. L'exécution de factor
sur une variable de facteur existante réinitialisera les niveaux uniquement à ceux qui sont présents.
Ajout à la réponse de Hong Ooi, voici un exemple que j'ai trouvé de R-Bloggers.
# Create some fake data
x <- as.factor(sample(head(colors()),100,replace=TRUE))
levels(x)
x <- x[x!="aliceblue"]
levels(x) # still the same levels
table(x) # even though one level has 0 entries!
The solution is simple: run factor() again:
x <- factor(x)
levels(x)