Блок-схема удаления неиспользуемых категориальных значений - R

У меня такой код:

x = rnorm(30, 1, 1)
c = c(rep("x1",10), rep("x2",10), rep("x3",10))
df = dataframe(x,c)
boxplot(x ~ c, data=df)

Работает отлично. Но если я решу, что больше не заинтересован в просмотре x3, удалите его и перепрограммируйте:

dfMod = subset(df, c %in% c("x1", "x2"))
boxplot(x ~ c,data=dfMod)

Коробчатая диаграмма по-прежнему показывает столбец для x3.

введите описание изображения здесь

Я попытался дать подсказку к графику, используя

boxplot(x~c,data=dfMod, names = c("x1", "x2"))

но это вызывает ошибку, что размер имен неверен. Заранее спасибо за помощь


person JHowIX    schedule 13.11.2013    source источник


Ответы (1)


Используйте droplevels после subset

dfMod <- subset(df, c %in% c("x1", "x2"))    
dfMod$c <- droplevels(dfMod$c)
boxplot(x ~ c,data=dfMod)

Вы также можете использовать class для изменения factor на character и разделения внутри boxplot вызова

class(df) <- c("numeric", "character")
boxplot(x ~ c, subset=c %in% c("x1", "x2"),  data=df)

введите описание изображения здесь

person Jilber Urbina    schedule 13.11.2013
comment
Очевидно, что это легко сделать, и мне немного неловко из-за того, что мне приходится спрашивать об этом на SO. Чтобы я мог лучше разбираться в терминологии R, что мне нужно было погуглить, чтобы найти команду droplevels? Удаление неиспользуемого категориального значения из столбца фрейма данных не оказалось особенно полезным - person JHowIX; 14.11.2013
comment
Если вы напишете избавиться от неиспользуемых факторов в r в Google, вы получите много результатов об удалении неиспользуемых уровней;) - person Jilber Urbina; 14.11.2013