2016-04-30 7 views
2

Я очень новичок в программировании R, и я пытаюсь создать блестящее приложение r, которое берет данные о данных акустической атаки и строит гистограмму, которая определяет частоту своего рода атаки например Провоцированные, неспровоцированные, катание на лодках и т. Д. Однако я хочу иметь возможность фильтровать по региону. Вот пример набора данных.Выбор даты записи с помощью selectInput in shiny R

CaseNumber Year Type Country Area   OriginalOrder Region 
1642.00.00 1642 Unprovoked USA New York  136   Northeast 
1779.00.00 1779 Unprovoked USA Hawaii   152   West 
1805.09.00 1805 Invalid  USA New York  160   Northeast 
1816.09.03 1816 Unprovoked USA Rhode Island 164   Northeast 
1817.06.24 1817 Unprovoked USA South Carolina 168   South 
1828.00.00 1828 Unprovoked USA Hawaii   181   West 
1830.07.26 1830 Unprovoked USA Massachusetts 187   Northeast 
1837.00.00 1837 Invalid  USA South Carolina 196   South 
1837.00.00 1837 Unprovoked USA South Carolina 197   South 

Вот что у меня есть с моим R-кодом. Я могу иметь приложение показать мне диаграмму с данными для всех регионов, но я не уверен, как обновить приложение, так что, например, только атаки, которые произошли на Юге, появляются на гистограмме или только атаки на северо-востоке регионе, если выбран из выпадающего списка регионов, при этом он по умолчанию применяет атаки, которые произошли во всех регионах.

UI

# Link to Shark Attack Data 

setwd("C:\\MyData\\Shark-App"); 

data <- read.csv("Shark.csv"); 
attach(data); 

#Call in shiny 

library(shiny) 
library(dplyr); 


shinyUI(

    # Use a fluid Bootstrap layout 
    fluidPage(
    # Name Page 
    titlePanel("Type of Shark attacks by Region"), 

    #Generate a row with a sidebar 
    sidebarLayout( 

     # Define the sidebar with one input 
     sidebarPanel(
     selectInput("Area", "Select your Region:", 
        choices=names(Area)), 
     hr(), 
     helpText("Data from The Global Shark Attack File ") 
    ), 

     # Sprcify Bar Plot input 
     mainPanel(
     plotOutput("sharkPlot") 
    ) 

    ) 
) 
) 

Сервер

# Link to Shark Attack Data 

setwd("C:\\MyData\\Shark-App"); 

data <- read.csv("Shark.csv"); 
attach(data); 

#Check Data for consistency 

dim(data); 
names(data); 

library(shiny) 

#Define a server for the Shiny app 

shinyServer(function(input, output) { 
    # Plot the Shark graph 
    output$sharkPlot <- renderPlot({ 

    # Render a barplot 
    barplot(xtabs(~data$Type), 
      space=F, 
      col=rainbow(length(levels(data$Type))), 
      main = input$Area, 
      ylab= "Number of Attacks", 
      xlab= "Type") 

    }) 
}) 

Я признателен за любую помощь я могу получить

ответ

1

Как вы наполнении selectInput из ваших данных, вы должны создать selectInput в вашем server.R используя renderUI & uiOutput

Вам также необходимо сделать свой заговор реактивный на основе selectInput - то есть, сюжет изменяется, когда вы меняете свой выбор. Вы можете сделать это, обратившись к стоимости selectInput с input$Area

UI

library(shiny) 

shinyUI(

    # Use a fluid Bootstrap layout 
    fluidPage(
    # Name Page 
    titlePanel("Type of Shark attacks by Region"), 

    #Generate a row with a sidebar 
    sidebarLayout( 

     # Define the sidebar with one input 
     sidebarPanel(
     ## the choices for the selectInput come from the data, 
     ## so we've moved this into the server.R 
     uiOutput("Area"), 
     hr(), 
     helpText("Data from The Global Shark Attack File ") 
    ), 

     # Sprcify Bar Plot input 
     mainPanel(
     plotOutput("sharkPlot") 
    ) 

    ) 
) 
) 

server.R

library(shiny) 

#Define a server for the Shiny app 

shinyServer(function(input, output) { 

    data <- read.csv("Shark.csv"); 

    ## create selectInput based on the regions of the data 
    output$Area <- renderUI({ 

    choices <- unique(as.character(data$Region)) 
    selectInput("Area", "Select your Region:", choices=choices) 
    }) 

    # Plot the Shark graph 
    output$sharkPlot <- renderPlot({ 

    # Render a barplot 

    ## filter the data based on the value in `selectInput(Area)` 
    data_plot <- data[data$Region == input$Area, ] 
    barplot(xtabs(~data_plot$Type), 
      space=F, 
      col=rainbow(length(levels(data_plot$Type))), 
      main = input$Area, 
      ylab= "Number of Attacks", 
      xlab= "Type") 

    }) 
}) 
+0

Спасибо, это сработало, и я вижу, что я не был делать правильно. – Barzul

 Смежные вопросы

  • Нет связанных вопросов^_^