因子函数的文档指出:
一个因子的代码可能包含NA。对于数字x,设置排除= NULL使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", NA, "bygg, el, fordon, hantverk, sjöfart, industriteknik",
"estetiska programmet", "komvux", "naturvetenskapliga programmet",
NA, "specialutformat program", "estetiska programmet", "medieprogrammet/medieproduktion",
"specialutformat program", "specialutformat program", "komvux",
"estetiska programmet", "samhällsvetenskapliga programmet", "specialutformat program",
"friskoleprogram", "teknikprogrammet", "specialutformat program",
"teknikprogrammet", "Handels- och administrationsprogrammet",
"Hotell- och Restaurang", "samhällsvetenskapliga programmet",
"samhälls- och ekonomiprogrammet", "specialutformat program",
"komvux", "specialutformat program", "specialutformat program",
"bygg, el, fordon, hantverk, sjöfart, industriteknik", "komvux",
"Handels- och administrationsprogrammet", "teknikprogrammet",
"teknikprogrammet", "friskoleprogram", "specialutformat program",
"naturvetenskapliga programmet", "naturvetenskapliga programmet",
"samhällsvetenskapliga programmet", "ekonomiprogrammet/ ekonomi",
"samhällsvetenskapliga programmet", "samhällsvetenskapliga programmet",
"Hotell- och Restaurang", "specialutformat program", "samhällsvetenskapliga programmet",
"ekonomiprogrammet/ ekonomi", "bygg, el, fordon, hantverk, sjöfart, industriteknik",
"ekonomiprogrammet/ ekonomi", "komvux", "bygg, el, fordon, hantverk, sjöfart, industriteknik",
"estetiska programmet", "estetiska programmet", "samhällsvetenskapliga programmet",
"ekonomiprogrammet/ ekonomi", "naturvetenskapliga programmet",
"ekonomiprogrammet/ ekonomi", "bygg, el, fordon, hantverk, sjöfart, industriteknik",
"ekonomiprogrammet/ ekonomi", "bygg, el, fordon, hantverk, sjöfart, industriteknik",
"ekonomiprogrammet/ ekonomi", "bygg, el, fordon, hantverk, sjöfart, industriteknik",
"naturvetenskapliga programmet", "Handels- och administrationsprogrammet",
"ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi", "bygg, el, fordon, hantverk, sjöfart, industriteknik",
"bygg, el, fordon, hantverk, sjöfart, industriteknik", "ekonomiprogrammet/ juridik",
"ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ juridik", "ekonomiprogrammet/ ekonomi",
"ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi", "bygg, el, fordon, hantverk, sjöfart, industriteknik",
"ekonomiprogrammet/ ekonomi", "Handels- och administrationsprogrammet",
"ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi", "estetiska programmet",
"ekonomiprogrammet/ ekonomi", "teknikprogrammet", "samhällsvetenskapliga programmet",
"naturvetenskapliga programmet", "naturvetenskapliga programmet",
"teknikprogrammet", "ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi",
"ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi", "samhällsvetenskapliga programmet",
"samhällsvetenskapliga programmet", "naturvetenskapliga programmet",
"ekonomiprogrammet/ juridik", "ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ juridik",
"samhällsvetenskapliga programmet", "ekonomiprogrammet/ ekonomi",
"ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi",
"samhällsvetenskapliga programmet", "samhällsvetenskapliga programmet",
"samhällsvetenskapliga programmet", "ekonomiprogrammet/ juridik",
"teknikprogrammet", "teknikprogrammet", "ekonomiprogrammet/ ekonomi",
"ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi",
"ekonomiprogrammet/ ekonomi", "naturvetenskapliga programmet",
"naturvetenskapliga programmet", "ekonomiprogrammet/ ekonomi",
"ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi", "naturvetenskapliga programmet",
"ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ juridik",
"teknikprogrammet", "ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi",
"ekonomiprogrammet/ ekonomi", "naturvetenskapliga programmet",
"ekonomiprogrammet/ juridik", "naturvetenskapliga programmet",
"teknikprogrammet", "ekonomiprogrammet/ juridik", "ekonomiprogrammet/ ekonomi",
"ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi",
"samhällsvetenskapliga programmet", "ekonomiprogrammet/ ekonomi",
"samhällsvetenskapliga programmet", "estetiska programmet", "ekonomiprogrammet/ ekonomi",
"ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi",
"ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ juridik",
"ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ ekonomi", "teknikprogrammet",
"naturvetenskapliga programmet", "ekonomiprogrammet/ ekonomi",
"ekonomiprogrammet/ ekonomi", "ekonomiprogrammet/ juridik", "ekonomiprogrammet/ ekonomi",
NA, NA, NA, NA, NA, NA, NA, NA), totstatus_tri = c("troligt avbrott",
"tidigt avbrott eller återbud", "pågående studier", "troligt avbrott",
"troligt avbrott", "pågående studier", "pågående studier", "pågående studier",
"pågående studier", "pågående studier", "pågående studier", "tidigt avbrott eller återbud",
"tidigt avbrott eller återbud", "pågående studier", "tidigt avbrott eller återbud",
"tidigt avbrott eller återbud", "pågående studier", "pågående studier",
"troligt avbrott", "pågående studier", "pågående studier", "tidigt avbrott eller återbud",
"troligt avbrott", "tidigt avbrott eller återbud", "pågående studier",
"pågående studier", "pågående studier", "troligt avbrott", "troligt avbrott",
"pågående studier", "pågående studier", "pågående studier", "pågående studier",
"pågående studier", "tidigt avbrott eller återbud", "pågående studier",
"pågående studier", "pågående studier", "pågående studier", "tidigt avbrott eller återbud",
"pågående studier", "pågående studier", "tidigt avbrott eller återbud",
"pågående studier", "tidigt avbrott eller återbud", "tidigt avbrott eller återbud",
"tidigt avbrott eller återbud", "tidigt avbrott eller återbud",
"pågående studier", "troligt avbrott", "tidigt avbrott eller återbud",
"pågående studier", "tidigt avbrott eller återbud", "pågående studier",
"troligt avbrott", "pågående studier", "pågående studier", "pågående studier",
"pågående studier", "tidigt avbrott eller återbud", "pågående studier",
"pågående studier", "tidigt avbrott eller återbud", "pågående studier",
"pågående studier", "tidigt avbrott eller återbud", "tidigt avbrott eller återbud",
"tidigt avbrott eller återbud", "pågående studier", "troligt avbrott",
"tidigt avbrott eller återbud", "pågående studier", "pågående studier",
"pågående studier", "pågående studier", "tidigt avbrott eller återbud",
"tidigt avbrott eller återbud", "pågående studier", "pågående studier",
"pågående studier", "pågående studier", "pågående studier", "pågående studier",
"pågående studier", "pågående studier", "pågående studier", "pågående studier",
"pågående studier", "tidigt avbrott eller återbud", "pågående studier",
"pågående studier", "pågående studier", "pågående studier", "pågående studier",
"troligt avbrott", "troligt avbrott", "pågående studier", "pågående studier",
"tidigt avbrott eller återbud", "pågående studier", "tidigt avbrott eller återbud",
"pågående studier", "pågående studier", "pågående studier", "tidigt avbrott eller återbud",
"pågående studier", "troligt avbrott", "tidigt avbrott eller återbud",
"pågående studier", "pågående studier", "troligt avbrott", "pågående studier",
"pågående studier", "tidigt avbrott eller återbud", "tidigt avbrott eller återbud",
"pågående studier", "pågående studier", "pågående studier", "troligt avbrott",
"pågående studier", "tidigt avbrott eller återbud", "pågående studier",
"tidigt avbrott eller återbud", "troligt avbrott", "pågående studier",
"pågående studier", "pågående studier", "pågående studier", "troligt avbrott",
"pågående studier", "pågående studier", "pågående studier", "pågående studier",
"pågående studier", "pågående studier", "pågående studier", "tidigt avbrott eller återbud",
"troligt avbrott", "pågående studier", "pågående studier", "tidigt avbrott eller återbud",
"tidigt avbrott eller återbud", "pågående studier", "pågående studier",
"troligt avbrott", "troligt avbrott", "pågående studier", "tidigt avbrott eller återbud",
"tidigt avbrott eller återbud", "pågående studier", "troligt avbrott",
"pågående studier", "pågående studier", "tidigt avbrott eller återbud",
"pågående studier", "pågående studier", "pågående studier", "pågående studier",
"troligt avbrott", "pågående studier", "pågående studier", "pågående studier"
)), class = "data.frame", row.names = c(NA, -162L))
[1]: https://i.stack.imgur.com/i6emH.png
答案 0 :(得分:2)
一个简单的解决方案是在一开始就用全数据替换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)
并绘制:
答案 1 :(得分:2)
这是执行此操作的一种方法:
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)