У меня есть кадр данных, который имеет несколько переменных, которые имеют 5 уровней факторов. Я хочу удалить только один из этих уровней. Сначала я назначил все экземпляры этого уровня NA, а затем использовал команду droplevels
, чтобы избавиться от пустых уровней.Удаление Удельный коэффициент из переменной фактора
Однако для одной переменной в моем кадре данных один из уровней, которые я не хочу сбросить, не имеет никаких наблюдений. Есть ли способ удалить только определенный уровень факторов, а не только пустые.
Вот воспроизводимый пример
df <- data.frame(var1=rep(letters[1:5],2),var2=rep(letters[5:1],2),var3=c("a","c","d","e","a","c","d","e","a","c"))
levels(df$var3)<-c("a","c","d","e","b")
Это создает кадр данных, как у меня. Теперь я хочу удалить все экземпляры уровня e, а затем удалить его как возможный уровень. Я делаю это с помощью кода ниже.
df2<-replace(df, df=="e",NA)
df2<-droplevels(df2)
Проблема заключается в том, когда я использую droplevels
падает уровень б от var3 также. Я не хочу удалять уровень b только уровня e из всех переменных. Я искал способ удалить только определенный уровень, но не нашел ответа. Может ли кто-нибудь показать мне, как удалить только определенный факторный уровень? То, что я бы идеально хотел, это команда droplevels
, которую я могу сказать, чтобы просто удалить уровень e. Существует ли такая функция?
Я не думаю, что 'as.character' необходим. –
Вы правы, но я всегда опасаюсь факторов, которые внезапно ведут себя как их базовые цифры, а не их «ценности». Очевидно, что в функции 'factor' ожидается нормальное поведение. – BrodieG
'' as.data.frame'' messes с именами переменных, но '' check.names = FALSE'' по-видимому. – PatrickT