Mam ramkę danych zawierającą factor. Kiedy tworzę podzbiór tej ramki danych za pomocą subsetlub innej funkcji indeksowania, tworzona jest nowa ramka danych. Jednak factorzmienna zachowuje wszystkie swoje pierwotne poziomy, nawet jeśli / jeśli nie istnieją w nowej ramce danych.
Powoduje to problemy podczas wykonywania rysowania fasetowego lub korzystania z funkcji zależnych od poziomów czynników.
Jaki jest najbardziej zwięzły sposób usunięcia poziomów z czynnika w nowej ramce danych?
Oto przykład:
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
# all levels are still there!
levels(subdf$letters)
## [1] "a" "b" "c" "d" "e"