Problema
Cuando filtramos un data frame que contiene un factor, y creamos por ejemplo una tabla de contingencia, R nos muestra también aquellos niveles del factor no usados.
df <- data.frame(name = c("a", "a", "a", "b", "b", "c", "c", "c", "c"), x = 1:9)
library(dplyr)
aa <- df %>%
group_by(name) %>%
filter(n() < 4) %>%
droplevels()
table(aa$name)
En este ejemplo muestra c, cuando queremos que muestre solamente a y b.
# Resultado
a b c
3 2 0
# Resultado deseado
a b
3 2
Solución
Usamos la función droplevels o factor.
table(droplevels(aa$name))
table(factor(aa$name))
O como estamos empleando el paquete dplyr.
aa <- df %>%
group_by(name) %>%
filter(n() < 4) %>%
droplevels()
table(aa$name)
# Mejor aún:
df %>%
group_by(name) %>%
filter(n() < 4) %>%
droplevels() %>%
{table(.$name)}