Ответ 1
Недавно добавлена функция в R:
y <- droplevels(y)
Учитывая следующие макетные данные:
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')
Создание таблицы y$let
дает
a b c d e
0 20 21 22 18
Но я не хочу, чтобы a
показывал больше. Если я попытаюсь сделать это:
levels(y$let) <- factor(y$let)
Я помещаю частоты, так как теперь table(y$let)
дает мне
b d c e
0 20 21 40
Я знаю, что могу сделать xtabs(~ y$let, drop.unused.levels = T)
и обойти проблему, но не reset уровни переменных в своей основе (что важно для меня, так как это раннее изменение, которое я делаю к набору данных, который будет продолжаться на протяжении всего анализа). Более того, xtabs
- это другой класс из table
, который даст мне головные боли позже в проекте.
Вопрос: как я могу автоматически изменить levels(y$let)
, чтобы он не отображал уровни, которые были удалены при создании подмножества? В этом случае, как я могу заставить его показать [1] "b" "c" "d" "e"
?
Недавно добавлена функция в R:
y <- droplevels(y)
Просто сделайте y$let <- factor(y$let)
. Запуск factor
по существующей фактор-переменной будет reset для уровней только тех, которые присутствуют.
Добавление в ответ Hong Ooi, вот пример, который я нашел у R-Bloggers.
# Create some fake data
x <- as.factor(sample(head(colors()),100,replace=TRUE))
levels(x)
x <- x[x!="aliceblue"]
levels(x) # still the same levels
table(x) # even though one level has 0 entries!
The solution is simple: run factor() again:
x <- factor(x)
levels(x)