Diminua os níveis dos fatores em um quadro de dados subconjunto

Eu tenho um quadro de dados contendo um fator. Quando eu criar um subconjunto desse quadro de dados usandosubset() ou outra função de indexação, um novo quadro de dados é criado. No entanto, a variável de fator mantém todos os seus níveis originais - mesmo quando eles não existem no novo quadro de dados.

Isso cria dores de cabeça ao fazer plotagens facetadas ou usar funções que dependem de níveis de fatores.

Qual é a maneira mais sucinta de remover os níveis de um fator no meu novo quadro de dados?

Aqui está o meu exemplo:

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"

questionAnswers(13)

yourAnswerToTheQuestion