Niveles de factor de caída en un marco de datos subcontratados

Tengo un marco de datos que contiene un factor. Cuando creo un subconjunto de este marco de datos usandosubset() u otra función de indexación, se crea un nuevo marco de datos. Sin embargo, la variable factor conserva todos sus niveles originales, incluso cuando no existen en el nuevo marco de datos.

Esto crea dolores de cabeza al realizar trazados de facetas o usar funciones que se basan en niveles de factores.

¿Cuál es la forma más sucinta de eliminar niveles de un factor en mi nuevo marco de datos?

Aquí está mi ejemplo:

df <- data.frame(letters=letters[1:5],
                    numbers=seq(1:5))

levels(df$letters)
## [1] "a" "b" "c" "d" "e"

subdf <- subset(df, numbers <= 3)
##   letters numbers
## 1       a       1
## 2       b       2
## 3       c       3    

## but the levels are still there!
levels(subdf$letters)
## [1] "a" "b" "c" "d" "e"

Respuestas a la pregunta(13)

Su respuesta a la pregunta