Не удается разрешить "Предупреждение: фактор` officialTitle` содержит неявный NA, рассмотрите возможность использования `forcats :: fct_explicit_na`" - PullRequest
1 голос
/ 14 апреля 2020

Я попробовал следующее. Почему я все еще получаю forcats предупреждение?

# 1 Я выполняю

plotdata <- dplyr::filter(Marriage, FALSE) %>% count(officialTitle)

  if (nrow(plotdata) > 0){
    str <- paste("nrows > 0. Number of rows is ", nrow(plotdata))
    print(str)
    print(plotdata)

Но я получаю следующее:

[1] "nrows > 0. Number of rows is  1"
# A tibble: 1 x 2
  officialTitle     n
  <fct>         <int>
1 NA                0
Warning message:
Factor `officialTitle` contains implicit NA, consider using `forcats::fct_explicit_na`

# 2 Я обращаю внимание предупреждение и выполните следующее

plotdata <- dplyr::filter(Marriage, FALSE) %>% count(officialTitle)
plotdata$officialTitle <- fct_explicit_na(plotdata$officialTitle)

  if (nrow(plotdata) > 0){
    str <- paste("nrows > 0. Number of rows is ", nrow(plotdata))
    print(str)
    print(plotdata)

Это результат:

[1] "nrows > 0. Number of rows is  1"
# A tibble: 1 x 2
  officialTitle     n
  <fct>         <int>
1 (Missing)         0
Warning message:
Factor `officialTitle` contains implicit NA, consider using `forcats::fct_explicit_na` 

# 3 Тогда я думаю, может быть, это не имеет ничего общего с forcats , Я удаляю оператор forcats и удаляю n из plotdata, ie

plotdata <- dplyr::filter(Marriage, FALSE) %>% count(officialTitle)
plotdata <- na.omit(plotdata)

  if (nrow(plotdata) > 0){
    str <- paste("nrows > 0. Number of rows is ", nrow(plotdata))
    print(str)
    print(plotdata)

Вывод следующий:

[1] "nrows < 0. Number of rows is  0"
# A tibble: 0 x 2
# ... with 2 variables: officialTitle <fct>, n <int>
Warning message:
Factor `officialTitle` contains implicit NA, consider using `forcats::fct_explicit_na`

Полный код:

# Load packages ----
library(shiny)
library(ggplot2)
library(dplyr)
library(scales)
library(treemapify)
library(forcats)

# Load data ----
data(Marriage, package="mosaicData")

plotdata <- dplyr::filter(Marriage, FALSE) %>% count(officialTitle)
#plotdata$officialTitle <- fct_explicit_na(plotdata$officialTitle)
plotdata <- na.omit(plotdata)

  if (nrow(plotdata) > 0){
    str <- paste("nrows > 0. Number of rows is ", nrow(plotdata))
    print(str)
    print(plotdata)
    ggplot(plotdata, 
           aes(fill = officialTitle, 
               area = n,
               label = officialTitle)) +
      geom_treemap() + 
      geom_treemap_text(colour = "white", 
                        place = "centre") +
      labs(title = "Marriages by officiate") +
      theme(legend.position = "none")
  } else {
    str <- paste("nrows < 0. Number of rows is ", nrow(plotdata))
    print(str)
    print(plotdata)
  }

1 Ответ

2 голосов
/ 14 апреля 2020

Сообщение об ошибке не вызывается forcats. В вашем случае это результат count пустого df. Попробуйте это:

# Empty dataframe
df <- data.frame(x = factor(integer(0))) 

# Count empty column
dplyr::count(df, x)
#> Warning: Factor `x` contains implicit NA, consider using
#> `forcats::fct_explicit_na`
#> # A tibble: 1 x 2
#>   x         n
#>   <fct> <int>
#> 1 <NA>      0

# To avoid the warning use .drop = FALSE which also results in an empty df

dplyr::count(df, x, .drop = FALSE)
#> # A tibble: 0 x 2
#> # ... with 2 variables: x <fct>, n <int>

Создано в 2020-04-14 пакетом Представить (v0.3.0)

С Marriage набор данных:

# Load data ----
library(dplyr)

data(Marriage, package="mosaicData")

dplyr::filter(Marriage, FALSE) %>% count(officialTitle)
#> Warning: Factor `officialTitle` contains implicit NA, consider using
#> `forcats::fct_explicit_na`
#> # A tibble: 1 x 2
#>   officialTitle     n
#>   <fct>         <int>
#> 1 <NA>              0

dplyr::filter(Marriage, FALSE) %>% count(officialTitle, .drop = FALSE)
#> # A tibble: 9 x 2
#>   officialTitle           n
#>   <fct>               <int>
#> 1 "BISHOP"                0
#> 2 "CATHOLIC PRIEST"       0
#> 3 "CHIEF CLERK"           0
#> 4 "CIRCUIT JUDGE "        0
#> 5 "ELDER"                 0
#> 6 "MARRIAGE OFFICIAL"     0
#> 7 "MINISTER"              0
#> 8 "PASTOR"                0
#> 9 "REVEREND"              0

Создан в 2020-04-14 с помощью представительного пакета (v0.3.0)

...