如何确保“ NA”不是最后一个因子水平?

因子函数的文档指出:

  

一个因子的代码可能包含NA。对于数字x,设置排除=   NULL使NA成为附加级别(打印为); 默认情况下,这是   最后一级。

我不想要这个。

我当前的数据如下:

如何确保“ NA”不是最后一个因子水平?

我希望我的因子水平根据组内大小进行排序,其中包括我的NA值观察值。有什么办法吗?

到目前为止,我已经尝试过重命名NA值,以便进行其他更改(使用ifelse()和is.na())以及factor函数中的exclude = NULL选项。

我当前的代码(我创建了一个排序表,然后根据该表对因子水平进行排序):

vettig_tabell<-table(fulldata$gymnasiegrov,fulldata$totstatus_tri,exclude=NULL)
vettig_tabell<-as.data.frame(vettig_tabell)
vettig_tabell<-spread(vettig_tabell,Var2,Freq)
vettig_tabell<-vettig_tabell%>%mutate(ongoing=`pågående studier`/(`pågående studier` + `tidigt avbrott eller återbud` + `troligt avbrott`))

#sorting by relative frequency#

vettig_tabell<-vettig_tabell%>%arrange(ongoing)

#Trying to use order of programmes sorted on relative frequency as factor levels#

fulldata$gymnasiegrov<-factor(fulldata$gymnasiegrov,exclude=NULL levels=vettig_tabell$Var1,ordered=TRUE)

fulldata %>%
    as_tibble() %>%
    group_by(gymnasiegrov,totstatus_tri) %>% 
    summarise(antal = n()) %>% 
    mutate(andel = antal / sum(antal))%>% 
    ggplot(.) + 
    geom_col(mapping = aes(x = gymnasiegrov,y = andel)) + 
    coord_flip() + 
    facet_wrap(~totstatus_tri)

数据摘录:

structure(list(gymnasiegrov = c("Hotell- och Restaurang",NA,"specialutformat program","komvux","bygg,el,fordon,hantverk,sjöfart,industriteknik","estetiska programmet","naturvetenskapliga programmet","medieprogrammet/medieproduktion","samhällsvetenskapliga programmet","friskoleprogram","teknikprogrammet","Handels- och administrationsprogrammet","Hotell- och Restaurang","samhälls- och ekonomiprogrammet","ekonomiprogrammet/ ekonomi","ekonomiprogrammet/ juridik",NA),totstatus_tri = c("troligt avbrott","tidigt avbrott eller återbud","pågående studier","troligt avbrott","pågående studier"
)),class = "data.frame",row.names = c(NA,-162L))

  [1]: https://i.stack.imgur.com/i6emH.png
Win_ky33 回答:如何确保“ NA”不是最后一个因子水平?

一个简单的解决方案是在一开始就用全数据替换NA。我在示例中使用“缺少”。由于这是一个开始的因素,因此您需要将其转换为字符,然后使用replace_NA

fulldata <- fulldata %>% mutate(gymnasiegrov=replace_na(as.character(gymnasiegrov),"Missing"))

然后您进行制表。

    vettig_tabell<-table(fulldata$gymnasiegrov,fulldata$totstatus_tri,exclude=NULL)
    vettig_tabell<-as.data.frame(vettig_tabell)
    vettig_tabell<-spread(vettig_tabell,Var2,Freq)
    vettig_tabell<-vettig_tabell%>%mutate(ongoing=`pågående studier`/(`pågående studier` + `tidigt avbrott eller återbud` + `troligt avbrott`))

#sorting by relative frequency#

vettig_tabell<-vettig_tabell%>%arrange(ongoing)

尝试使用按相对频率排序的程序顺序作为因子水平

然后您再次考虑Gymnasiegrov

fulldata$gymnasiegrov<-factor(fulldata$gymnasiegrov,levels=vettig_tabell$Var1,ordered=TRUE)

并绘制:

enter image description here

,

这是执行此操作的一种方法:

library(tidyverse)

fulldata %>%
  as_tibble() %>%
  group_by(gymnasiegrov,totstatus_tri) %>% 
  summarise(antal = n()) %>% 
  mutate(andel = antal / sum(antal)) %>%
  ungroup %>%
  replace_na(list(gymnasiegrov = 'NA')) %>%
  arrange(desc(andel)) %>%
  mutate(gymnasiegrov = factor(gymnasiegrov,levels = unique(gymnasiegrov))) %>%
  ggplot() + 
  geom_col(mapping = aes(x = gymnasiegrov,y = andel)) + 
  coord_flip() + 
  facet_wrap(~totstatus_tri)

enter image description here

本文链接:https://www.f2er.com/3168016.html

大家都在问