Подмножество данных в R Shiny с использованием нескольких переменных - PullRequest
1 голос
/ 30 мая 2020

Я новичок в R Shiny. Я пытаюсь создать app, который позволяет пользователю subset a data.frame на основе нескольких переменных, а затем просматривать полученные данные.

Вот небольшой пример набора данных:

iter,wave,apples
1,1,600
1,1,500
1,1,400
1,2,300
1,2,200
1,2,100
2,1,1000
2,1,1100
2,1,1200
2,2,1300
2,2,1400
2,2,1500
3,1,1100
3,1,2200
3,1,3300
3,2,4400
3,2,5500
3,2,6600

Я хотел бы, чтобы пользователь мог указать значение iter и wave и увидеть полученные данные.

Вот моя попытка кода Shiny. Я понимаю, что, должно быть, делаю несколько глупых ошибок.

Редактировать

Вот мой измененный код. Конечный результат теперь довольно близок к тому, что я хочу. sidebar по-прежнему отображается неправильно.

library(shiny)

setwd('C:/Users/mark_/Documents/simple_RShiny_files/explore')

apple.data <- read.csv('subset_data_based_on_multiple_variables.csv', 
                        header = TRUE, stringsAsFactors = FALSE)

ui <- fluidPage(

     titlePanel("Subsetting Apple Dataset"),

     sidebarLayout(
          sidebarPanel(
               uiOutput("codePanel")
          ),

          mainPanel(
               tableOutput("view")
          )
     ),

     selectInput("codeInput", inputId ="data1", label = "Choose Iter", choices = unique(apple.data$iter)),
     selectInput("codeInput", inputId ="data2", label = "Choose Wave", choices = unique(apple.data$wave))

)

server <- function(input, output) {

     output$codePanel <- renderUI({

     })

     dataset <- reactive({

          subset(apple.data, (iter == input$data1 & wave == input$data2))

     })

     output$view <- renderTable(dataset())

}

shinyApp(ui = ui, server = server)

Вывод

enter image description here

1 Ответ

2 голосов
/ 30 мая 2020

Проблема в том, что оба selectInputs имеют одинаковые inputId. Это работает:

library(shiny)

apple.data <- data.frame(
        iter = c(1L,1L,1L,1L,1L,1L,2L,2L,2L,2L,2L,
                 2L,3L,3L,3L,3L,3L,3L),
        wave = c(1L,1L,1L,2L,2L,2L,1L,1L,1L,2L,2L,
                 2L,1L,1L,1L,2L,2L,2L),
      apples = c(600L,500L,400L,300L,200L,100L,1000L,
                 1100L,1200L,1300L,1400L,1500L,1100L,2200L,3300L,4400L,
                 5500L,6600L)
)

ui <- fluidPage(
    titlePanel("Subsetting Apple Dataset"),
    sidebarLayout(
        sidebarPanel(
            selectInput("codeInput1", label = "Choose Iter", choices = unique(apple.data$iter)),
            selectInput("codeInput2", label = "Choose Wave", choices = unique(apple.data$wave))
        ),
        mainPanel(
            tableOutput("view")
        )
    )
)

server <- function(input, output) {


    dataset <- reactive({
        return(subset(apple.data, (iter == input$codeInput1 & wave == input$codeInput2)))
    })

    output$view <- renderTable(dataset())
}

shinyApp(ui = ui, server = server)

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