У меня есть кадр данных, содержащий множитель. Когда я создаю подмножество этого фрейма данных, используя subset()
или другую функцию индексирования, создается новый кадр данных. Однако фактор-переменная сохраняет все свои исходные уровни - даже если они не существуют в новом фрейме данных.Уровни фактора падения в подмножестве данных
Это создает головные боли при графовом построении или использовании функций, которые полагаются на уровни факторов.
Что является самым кратким способом удаления уровней из фактора в моем новом фрейме данных?
Вот мой пример:
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"
Это нормально для одноразового использования, но в data.frame с большим количеством столбцов вы можете сделать это на каждом столбце, который является фактором ..., что приводит к необходимости в такой функции, как drop.levels () из gdata. –
Я вижу ... но с точки зрения пользователя быстро написать что-то вроде subdf [] <- lapply (subdf, function (x) if (is.factor (x)) factor (x) else x) ... Является ли drop.levels() намного эффективнее вычислительно или лучше с большими наборами данных? (Мне нужно было бы переписать строку выше в for-loop для огромного фрейма данных, я полагаю.) – hatmatrix
Спасибо Стивен и Дирк. Я даю этому один большой палец для подсказок одного фактора, но, надеюсь, люди будут прочитайте эти комментарии для своих предложений по очистке всего кадра данных факторов. – medriscoll