2
votes

Avertissement: le facteur contient une NA implicite

Je suis nouveau dans R et Shiny et j'essaye de créer un tracé interactif avec ggplot2. Lorsque l'utilisateur coche la case, il a accès à un champ de sélection multiple pour personnaliser le tracé.

La trame de données d'origine contient des valeurs manquantes identifiées comme "N / A" dans Publisher code> et colonne Année . J'ai supprimé les lignes contenant des NA avec complete.cases donc il ne devrait plus y avoir de NA.

Je lance mon application: OK. J'arrive à l'intrigue par défaut: OK. Je coche la case: Attention: le facteur 'Publisher' contient une NA implicite, pensez à utiliser 'forcats :: fct_explicit_na'

Je voudrais supprimer cet avertissement, au moins le comprendre . Si vous avez des commentaires supplémentaires, veuillez le faire: mon objectif est de m'améliorer.

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)


6 commentaires

S'il vous plaît, si c'est possible: fournissez des exemples de données pour que votre question devienne reproductible.


Cette erreur survient-elle même si vous convertissez Publisher de facteur en caractère ?


@ heck1 J'ai obtenu mon ensemble de données de kaggle: kaggle.com/gregorut/videogamesales


@Sonny je vais l'essayer dès que possible


Quelque chose d'un côté, mais dans read.csv vous pouvez utiliser un argument na.strings pour indiquer à R le format de NA dans les données que vous lisent, par exemple df <-read.csv ("vgsales.csv", na.strings = "N / A") , ce qui peut vous éviter d'avoir à les convertir plus tard.


@AaronHayman Merci!


3 Réponses :


2
votes

Avec:

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) 

l'erreur n'apparaît plus. Tant que les données avec lesquelles vous travaillez dans shiny ne contiennent pas de facteurs (d'où provient le "NA implicite"), l'erreur n'apparaît pas avec mes exemples de données.


1 commentaires

Merci. Si vous avez des explications, ce serait apprécié



6
votes

L'avertissement apparaît car NA n'est pas un niveau dans un facteur. Il manque juste. L'avertissement vous rappelle qu'il existe un niveau "caché" dans le facteur qui n'apparaîtra pas lorsque vous effectuez des opérations sur le facteur.

Par exemple, un facteur de base:

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

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

N'a que 3 niveaux lorsque nous l'imprimons ou le résumons dans un tableau rapide:

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


1 commentaires

Je pense que je comprends. Merci



0
votes

Si votre dataframe contient des niveaux de facteurs inutilisés, j'utilise

pubSales <- droplevels(pubSales)

Cela supprime les niveaux inutilisés et l'erreur pour moi.


0 commentaires