为因子内的NA值分配预定级别

时间:2019-03-25 03:07:28

标签: r ggplot2

在下面的图中,我想更改NA以在x轴上显示“待处理”。我该如何实现?

该图的数据来自一个大表,并且在NA列中包含mth_yr值。我只想在构建图时更改标签,这样我就知道转换仅发生在图内(因此我不会忘记现在的6个月)。

library(tidyverse)

df <- data.frame(stringsAsFactors=FALSE,
            mth_yr = c("Jul2018", "Aug2018", "Sep2018", "Oct2018", "Nov2018",
                       "Dec2018", NA),
            output = c(5, 10, 15, 20, 25, 30, 35)
      )

df %>% 
  ggplot(aes(x = factor(mth_yr, levels = c("Jul2018", "Aug2018", "Sep2018", 
                                            "Oct2018", "Nov2018","Dec2018")),
                  y = output)) +
  geom_col() +
  xlab("")

请帮助!

2 个答案:

答案 0 :(得分:1)

在绘制之前,可以使用vNA替换为Pending

replace_na

enter image description here

答案 1 :(得分:1)

正如我在上面的评论中提到的那样,您可以使用forcats::fct_explicit_na来将NA级别替换为更具体的内容。

forcats::as_factor将变量转换为具有水平出现顺序的因子 ,这意味着您不必担心拼写水平以覆盖任何字母顺序。然后创建“待处理”标签。

library(ggplot2)
library(dplyr)
library(forcats)

df <- data.frame(stringsAsFactors=FALSE,
                 mth_yr = c("Jul2018", "Aug2018", "Sep2018", "Oct2018", "Nov2018",
                            "Dec2018", NA),
                 output = c(5, 10, 15, 20, 25, 30, 35)
)

with_pending <- df %>%
   mutate(mth_yr = as_factor(mth_yr) %>%
             fct_explicit_na(na_level = "Pending"))
with_pending
#>    mth_yr output
#> 1 Jul2018      5
#> 2 Aug2018     10
#> 3 Sep2018     15
#> 4 Oct2018     20
#> 5 Nov2018     25
#> 6 Dec2018     30
#> 7 Pending     35

ggplot(with_pending, aes(x = mth_yr, y = output)) +
   geom_col() +
   xlab("")

reprex package(v0.2.1)于2019-03-25创建