Есть ли функция R, чтобы иметь фильтр внутри основной панели - PullRequest
1 голос
/ 03 июля 2019

У меня есть код, который имеет фрейм данных внутри мэйнфрейма.Как только я выбираю «ABC» или «DEF», отображается фрейм данных, но мне нужно иметь там фильтр.Подобно тому, что мы получаем, когда помещаем View (dataobject) в R studio

Unit_Price <- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 
                56,61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46,59, 46, 58, 
                43)
Material <- c("tas", "sa", "qld", "nsw", "nsw", "nt", "wa", 
              "wa","qld", "vic", "nsw", "vic", "qld", "qld", "sa", "tas","sa", 
              "nt", "wa", "vic", "qld", "nsw", "nsw", "wa","sa", "act", "nsw", 
              "vic", "vic", "act")
library(shiny)
ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(selectInput("x","Supplier name",choices = 
                               c("ABC","DEF")),
                 checkboxInput("mean","Mean Prices are"),
                 tableOutput("mean")),
    mainPanel(h6("Here it is"),
              tableOutput("message")
    ) 
  ) 
)
server <- function(input, output, session) {
  data <- reactive({
    if (input$x == "ABC") {
      data.frame(Unit_Price, Material)
    } else if (input$x == "DEF") 
    {
      data.frame(Material=c("A","B"), Unit_Price=c(7,8))
    }
  })
  output$message <- renderTable({
    data()
  })
  output$mean <- renderTable(rownames = TRUE, {
    req(input$mean)
    df <- data()
    tapply(df$Unit_Price, df$Material, mean)
  })
}
shinyApp(ui, server)

1 Ответ

0 голосов
/ 03 июля 2019

Вы можете использовать пакет DT. В базовой версии он дает вам фильтры.

Unit_Price <- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 
                56,61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46,59, 46, 58, 
                43)
Material <- c("tas", "sa", "qld", "nsw", "nsw", "nt", "wa", 
              "wa","qld", "vic", "nsw", "vic", "qld", "qld", "sa", "tas","sa", 
              "nt", "wa", "vic", "qld", "nsw", "nsw", "wa","sa", "act", "nsw", 
              "vic", "vic", "act")
library(shiny)
ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(selectInput("x","Supplier name",choices = 
                               c("ABC","DEF")),
                 checkboxInput("mean","Mean Prices are"),
                 tableOutput("mean")),
    mainPanel(h6("Here it is"),
              DT::dataTableOutput("message")
    ) 
  ) 
)
server <- function(input, output, session) {
  data <- reactive({
    if (input$x == "ABC") {
      data.frame(Unit_Price, Material)
    } else if (input$x == "DEF") 
    {
      data.frame(Material=c("A","B"), Unit_Price=c(7,8))
    }
  })
  output$message <- DT::renderDT({
    data()
  })
  output$mean <- renderTable(rownames = TRUE, {
    req(input$mean)
    df <- data()
    tapply(df$Unit_Price, df$Material, mean)
  })
}
shinyApp(ui, server)

Вы также можете использовать аргумент filter, чтобы получить дополнительные параметры фильтрации. Просто замените следующий код:

  output$message <- DT::renderDT({
    data()
  },filter = "top")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...