【问题标题】:Warning: Factor contains implicit NA警告:因子包含隐含的 NA
【发布时间】:2019-03-05 09:44:26
【问题描述】:

我是 R 和 Shiny 的新手,我正在尝试使用 ggplot2 创建一个交互式绘图。当用户选中复选框时,他可以访问多选字段来自定义绘图。

原始数据框包含在PublisherYear 列中标识为"N/A" 的缺失值。我用complete.cases 删除了包含 NA 的行,所以它不应该留下任何 NA。

我运行我的应用程序:好的。我得到默认情节:好的。我选中复选框:Warning: Factor 'Publisher' contains implicit NA, consider using 'forcats::fct_explicit_na'

我想删除这个警告,至少理解它。如果您有任何其他意见,请这样做:我的目标是变得更好。

app.R:

df<-read.csv("vgsales.csv")
df$Year[df$Year=="N/A"]<-NA
df$Year<-factor(df$Year)
df$Publisher[df$Publisher=="N/A"]<-NA
df$Publisher<-factor(df$Publisher)
df<-df[complete.cases(df),]

pubSales<-na.omit(df
    %>% group_by(Publisher, Year) 
    %>% summarise(Global_Sales=sum(Global_Sales))
)
pubSales<-pubSales[order(pubSales$Year),]

top5Pub<-head(unique(pubSales[order(-pubSales$Global_Sales),]$Publisher),5)

ui <- navbarPage("Video Games Sales",
    tabPanel("Publishers",
        mainPanel(
            titlePanel(
                title = "Publishers sales"
            ),
            sidebarPanel(
                radioButtons(
                    "pubOptions",
                    "Options",
                    c("Top 5 Publishers"="topFivePub",
                      "Custom Publishers"="customPub"),
                    selected="topFivePub"
                ),
                uiOutput("customPubUI")
            ),
            mainPanel(
                plotOutput("pubPlot")
            ),
            width=12
        )
    )
)

server <- function(input, output, session) {

    output$customPubUI<-renderUI({
        if(input$pubOptions=="customPub"){
            selectInput(
                "selectedPub",
                "Editeurs",
                pubSales$Publisher,
                multiple=TRUE
            )
        }
    })

    output$pubSales<-renderTable(pubSales)
    output$pubPlot<-renderPlot({
        ggplot()+
            if(input$pubOptions=="customPub"){
                geom_line(
                    data=pubSales[pubSales$Publisher %in% input$selectedPub,],
                    aes(x=Year,y=Global_Sales,colour=Publisher,group=Publisher)
                )
            }else{
                geom_line(
                    data=pubSales[pubSales$Publisher %in% top5Pub,],
                    aes(x=Year,y=Global_Sales,colour=Publisher,group=Publisher)
                )
            }
    })

}

shinyApp(ui, server)

【问题讨论】:

  • 如果可能,请提供示例数据,以便您的问题可以重现。
  • 即使您将 Publisher 从 factor 转换为 character,也会出现该错误吗?
  • @heck1 我从 kaggle 获得了我的数据集:kaggle.com/gregorut/videogamesales
  • @Sonny 我会尽快尝试的
  • 有点旁白,但在read.csv 中,您可以使用参数na.strings 告诉R 在您正在阅读的数据中NA 的格式,例如df&lt;-read.csv("vgsales.csv" , na.strings = "N/A"),这可以让您不必在以后转换它们。

标签: r shiny na missing-data


【解决方案1】:

警告弹出是因为 NA 不是因子中的一个级别。它只是失踪了。该警告提醒您,当您对该因子执行操作时,该因子中存在一个“隐藏”级别,该级别不会显示。

例如,一个基本因素:

a.factor <- as.factor(c('a', 'b', 'c', NA))

当我们打印或汇总在快速表中时,只有 3 个级别:

> print(a.factor)
[1] a    b    c    <NA>
Levels: a b c

> table(a.factor)
a.factor
a b c 
1 1 1 

【讨论】:

  • 我想我明白了。谢谢
【解决方案2】:

与:

require(shiny)
require(tidyverse)

# Create some sample data:
year <- rep(2000:2018, each=3)

publ <- rep(strrep(c("Pub 1", "Pub2", "pub3"), 1), 19)

Global_Sales <- rep(sample(1:100,19),3)
# Create a observation with NA:
newline <- c(NA, NA, 33)

df <- data.frame(Year = year, Publisher = publ, Global_Sales = Global_Sales)
df <- rbind(df,newline)
df <- na.omit(df)

pubSales<-df %>%  group_by(Publisher, Year)  %>%
  summarise(Global_Sales=sum(Global_Sales)) 

pubSales$Publisher <- as.character(pubSales$Publisher) 

错误不再出现。只要您在闪亮中使用的数据不包含因子(这是“隐式 NA”的来源),我的样本数据就不会出现错误。

【讨论】:

  • 谢谢。如果您有一些解释,将不胜感激
【解决方案3】:

如果您的数据框包含未使用的因子级别,我使用

pubSales <- droplevels(pubSales)

这为我删除了未使用的级别和错误。

【讨论】:

    猜你喜欢
    • 2015-06-20
    • 2020-09-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 2014-06-28
    • 2019-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多