当我们在处理多个水平的数据时,常常经过过滤会删掉很多的levels,但是在下一步的模型或有的分析中会提示:
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels): factor X has new levels, level1,level2
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels): factor X has new levels
你会好奇明明自己在之前已经过滤了,为什么还出现。比如笔者常用filter
or subset
筛选数据,其实我们只是把那些不要水平的数据记为0,并没有删掉水平。
因此我们需要用到一个很基础的函数
droplevels()
R帮助中使用的例子是:
aq <- transform(airquality, Month = factor(Month, labels = month.abb[5:9]))
aq <- subset(aq, Month != "Jul")
table( aq $Month)
#May Jun Jul Aug Sep
#31 30 0 31 30
table(droplevels(aq)$Month)
#May Jun Aug Sep
#31 30 31 30
因此我在我的代码块里面借鉴了这个用法,代码如下:
sj <- sj %>%
filter(str_detect(sj$Diagnosis, "^da$|^db$|^dc$" ))
data_grid(Diagnosis = droplevels(multi_reg)$Diagnosis)
这样在后面的模型中就不会出现那些删掉的水平啦。
希望对你有所帮助。
网友评论