superponer - ¿Cómo puedo eliminar los niveles no utilizados de un marco de datos?
superponer graficas en r (3)
Agregando a la respuesta de Hong Ooi, este es un ejemplo que encontré 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)
Dada la siguiente información falsa:
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'')
Creando una tabla de y$let
yields
a b c d e
0 20 21 22 18
Pero no quiero que se muestre más. Si trato de hacer esto:
levels(y$let) <- factor(y$let)
Enredezco las frecuencias, ya que ahora la table(y$let)
me da
b d c e
0 20 21 40
Soy consciente de que podría hacer xtabs(~ y$let, drop.unused.levels = T)
y solucionar el problema, pero no restablece los niveles variables en su núcleo (lo cual es importante para mí, ya que esto es un cambio temprano que estoy haciendo en el conjunto de datos que continuará a lo largo de todo el análisis). Además, xtabs
es una clase diferente de la table
, lo que me dará dolores de cabeza más adelante en el proyecto.
La pregunta es: ¿cómo puedo cambiar automáticamente los levels(y$let)
para que no muestre los niveles que se eliminaron cuando creé el subconjunto? En este caso, ¿cómo puedo hacer que muestre [1] "b" "c" "d" "e"
?
Hay una función agregada recientemente en R para esto:
y <- droplevels(y)
Solo haz y$let <- factor(y$let)
. El factor
ejecución en una variable de factor existente restablecerá los niveles solo a aquellos que están presentes.