Можно ли перенаправить пользовательский ввод, чтобы определить «варианты» (варианты пользовательского ввода) второго пользовательского ввода? - PullRequest
0 голосов
/ 26 апреля 2019

Я создаю блестящую панель инструментов и пытаюсь перенаправить пользовательский ввод, чтобы определить «варианты» (варианты пользовательского ввода) второго пользовательского ввода. Я загружаю CSV-файл, который содержит данные, от которых будет зависеть пользовательский ввод:

Пример: один столбец csv содержит номер клиента. Иногда встречаются повторяющиеся номера клиентов, поскольку этот клиент присутствует в нескольких состояниях (поэтому номер клиента в 2 разных строках связан с двумя различными состояниями)

Если указанный номер клиента выбран в первом пользовательском вводе, как бы я использовал этот ввод, чтобы создать 2 варианта состояния во втором раскрывающемся списке пользовательского ввода?

Я приложил свой код:

bcl <- read.csv("C:/Users/jtberg/Desktop/rand_data.csv", stringsAsFactors = FALSE)


ui <- shinyUI(fluidPage(

  titlePanel("UW Model Output"),

  sidebarLayout(

    sidebarPanel(

      selectInput("customername", "Customer Name",
                  choices = sort(unique(bcl$Customer_Name))),
      #starting second version with dependent input variable choices
      uiOutput("secondSelection")

    ),
    mainPanel(("Results"),
            textOutput("customername"),
            textOutput("secondSelection"))
  )
)
)
server <- function(input, output){
  #output$columns <- renderUI({
    #n <- input$customername
    #myspecies <- bcl[(bcl$Quintiles == n),11]
    #mydata = get(myspecies)
    #selectInput('pstate', 'Policy State', choices = names(mydata))
  output$secondSelection <- renderUI({
    selectInput("pstate", "Maybe: ", choices = as.character(bcl[bcl$Customer_Name == input$customername, "name"]))
  })

}

shinyApp(ui = ui, server = server)

Часть 2: Если бы я хотел использовать пользовательский ввод для создания динамического отображения таблицы, чтобы при выборе номера и состояния клиента все содержимое остальной части соответствующей строки (где находится номер и состояние клиента) отображалось в виде Таблица данных, как бы я это сделал?

Пример: (Столбцы пользовательского ввода)

    |      Col 1     |  Col 2     |  Col 3   |    Col 4   |    Col 5 | 
    ------------------------------------------------------------------            
    |   CusNumInput | StateInput |    A     |      B     |      C   |
    ------------------------------------------------------------------

Пользовательский ввод (CusNumInput и StateInput), поэтому печатает таблицу с A, B и C в нем.

1 Ответ

0 голосов
/ 26 апреля 2019

да, это возможно сделать. Поскольку я не мог получить доступ к вашему набору данных, мне пришлось создать свой собственный.

Ключом к этому является то, что ваш набор данных для фильтра будет зависеть от предыдущего выбора.

Я также добавил условную функцию для вашего второго фильтра в качестве бонуса, вы можете удалить его для своих нужд.

ui <- fluidPage(

  #
  titlePanel("UW Model Output"),

  sidebarLayout(
    sidebarPanel(
      uiOutput("firstSelection"),
      uiOutput("secondSelection")
    ),
    mainPanel(
    )
  )
)



server <- function(input, output){

  dat <- data.frame(CustomerNumber = c(1,1,1,2,2,3,4,5), State = c("AZ","FL","IL","AZ","NC","IN","WI", "CO"), stringsAsFactors = FALSE)

  output$firstSelection <- renderUI ({
       selectInput(inputId = "First", "First Filter",
                   choices = c("",paste0(sort(as.character(unique(dat$CustomerNumber)))))
    )
  })

  output$secondSelection <- renderUI ({
      Lvl2 <- dat[dat$CustomerNumber == input$First,]

      conditionalPanel(condition = "input.First != ''",
        selectInput(inputId = "Second", "Second Filter",
                  choices = paste0(sort(unique(Lvl2$State)))
                  )
        )
  })

}

shinyApp(ui, server)

Обновлены

library (DT)

ui <- fluidPage(

  #
  titlePanel("UW Model Output"),

  sidebarLayout(
    sidebarPanel(
      uiOutput("firstSelection"),
      uiOutput("secondSelection")
    ),
    mainPanel(
      DT::dataTableOutput("table1")
    )
  )
)



server <- function(input, output){

  dat <- data.frame(CustomerNumber = c(1,1,1,2,2), 
                    State = c("AZ","FL","IL","AZ","NC"), 
                    Col3 = c("B","D","C","E","F"),
                    Col4 = c("G","H","I","J","K"),
                    Col5 = c("L","M","N","O","P"),
                    stringsAsFactors = FALSE)

  #Fitler Selections
  output$firstSelection <- renderUI ({
    selectInput(inputId = "First", "First Filter",
                choices = c("",paste0(sort(as.character(unique(dat$CustomerNumber)))))
    )
  })

  output$secondSelection <- renderUI ({
    Lvl2 <- dat[dat$CustomerNumber == input$First,]

    conditionalPanel(condition = "input.First != ''",
                     selectInput(inputId = "Second", "Second Filter",
                                 choices = paste0(sort(unique(Lvl2$State)))
                     )
    )
  })

  #Data Table
  output$table1 <- DT::renderDataTable({
    temp <- dat[dat$CustomerNumber == input$First & dat$State == input$Second,]
    temp <- temp[-c(1:2)]


  },
  rownames = FALSE)

}

shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...