2017-08-31

Eliminar los niveles no usados de un factor en R

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)}

Entradas relacionadas

Referencias

No hay comentarios:

Publicar un comentario

Nube de datos