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)
3 Réponses :
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.
Merci. Si vous avez des explications, ce serait apprécié
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))
Je pense que je comprends. Merci
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.
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
encaractè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 argumentna.strings
pour indiquer à R le format deNA
dans les données que vous lisent, par exempledf <-read.csv ("vgsales.csv", na.strings = "N / A")
, ce qui peut vous éviter d'avoir à les convertir plus tard.@AaronHayman Merci!