Biorąc pod uwagę następujące dane makiety:Jak mogę usunąć nieużywane poziomy z ramki danych?
set.seed(123)
x <- data.frame(let = sample(letters[1:5], 100, replace = T),
num = sample(1:10, 100, replace = T))
y <- subset(x, let != 'a')
Tworzenie spisu y$let
daje
a b c d e
0 20 21 22 18
Ale nie chcę a
aby zobaczyć więcej. Gdy próbuję to zrobić:
levels(y$let) <- factor(y$let)
I bałagan częstotliwości, ponieważ teraz table(y$let)
daje mi
b d c e
0 20 21 40
Jestem świadomy mogłem zrobić xtabs(~ y$let, drop.unused.levels = T)
i obejść ten problem, ale to nie robi zresetuj poziomy zmiennych w swoim rdzeniu (co jest dla mnie ważne, ponieważ jest to wczesna zmiana, którą wprowadzam do zestawu danych, który będzie się toczył przez całą analizę). Co więcej, xtabs
to inna klasa niż table
, która wywoła u mnie ból głowy w dalszej części projektu.
Pytanie brzmi: w jaki sposób mogę automatycznie zmienić levels(y$let)
, aby nie wyświetlały poziomów, które zostały usunięte po utworzeniu podzbioru? W takim przypadku, jak mogę sprawić, by było wyświetlane [1] "b" "c" "d" "e"
?
Zwycięska odpowiedź na pytanie powielone nie jest tak dobra jak odpowiedź tutaj. Drugi powinien być oznaczony jako duplikat tego, ponieważ jest to DUŻO lepsza odpowiedź – TheSteve0