【问题标题】:Shiny Interactive Table with Manual Input and Summary Table Output具有手动输入和汇总表输出的闪亮交互式表格
【发布时间】:2020-05-23 16:53:30
【问题描述】:

我正在开发一个 Shiny 应用程序,我希望让最终用户能够指定一个值,然后在后台进行计算并在汇总表中生成结果.

到目前为止,我已经能够创建用于选择的仪表板和基于这些选择的汇总表。

以下示例是所有权组拥有的一组餐厅。每家餐厅每天都有一张网。 UI 允许所有者选择多个餐厅,这些餐厅填充一张桌子,并有第二张汇总表汇总每日净值。

我希望为每家餐厅提供第二个输入,业主可以手动指定他们希望每家餐厅营业的小时数,并在汇总表中获取 @987654321 的总和@ / hours_opened 这样他们就可以根据自己决定将某些餐厅比其他餐厅营业多长时间来预测他们的总收入。

这是我目前所拥有的:

library(shiny)
library(knitr)
library(tidyverse)

## data
Restaurant <- c("R1", "R2", "R3", "R4", "R5")
daily_net <- c(250000, 90000, 165000, 113000, 340000)
df <- data.frame(Restaurant, daily_net)
df

## UI
ui <- fluidPage(

  titlePanel("Total Income"),

        selectizeInput(
            inputId = "Restaurant",
            label = "Restaurant",
            choices = Restaurant,
            selected = "",
            multiple = T
            ),

        mainPanel(tableOutput(outputId = "r_table"),
    tableOutput(outputId = "summary_table"))

)

## Server
server <- function(input, output){

    dat <- reactive({
                        dataset1 <- df %>% filter(Restaurant %in% input$Restaurant)
                        dataset1
                })

    dat2 <- reactive({
            dataset2 <- dat() %>%
                      summarize(total_net = sum(daily_net))
            dataset2
    })  


    output$r_table <- renderTable(dat(), align = "l")
    output$summary_table <- renderTable(dat2(), align = "l")

}


## Run app
shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    我想我已经找到了一个足够体面的工作来解决我想要达到的目标。

    我只是在 UI 中创建了几个数字输入,然后在服务器的响应式组件中构建它们以进行数学运算并产生结果。

    library(shiny)
    library(knitr)
    library(tidyverse)
    
    Restaurant <- c("R1", "R2", "R3", "R4", "R5")
    daily_net <- c(250000, 90000, 165000, 113000, 340000)
    df <- data.frame(Restaurant, daily_net)
    df
    
    ui <- fluidPage(
    
      titlePanel("Total Income"),
    
            selectizeInput(
                inputId = "Restaurant",
                label = "Restaurant",
                choices = Restaurant,
                selected = "",
                multiple = T
                ),
    
        numericInput("h1", "Hour - Restaurant 1", 1),
        numericInput("h2", "Hour - Restaurant 2", NA),
        numericInput("h3", "Hour - Restaurant 3", NA),
        numericInput("h4", "Hour - Restaurant 4", NA),
    
            mainPanel(tableOutput(outputId = "r_table"),
        tableOutput(outputId = "summary_table"))
    
    )
    
    server <- function(input, output){
    
    
    
        dat <- reactive({
    
               Hours <- c(input$h1, input$h2, input$h3, input$h4)
               Hours <- Hours[!is.na(Hours)]
    
                            dataset1 <- df %>% filter(Restaurant %in% input$Restaurant) %>%
                                          mutate(Number = seq_along(Restaurant),
                                                    Hours = Hours,
                                                    net_per_hour = daily_net  / Hours) %>%
                                          select(Number, Restaurant, daily_net, Hours, net_per_hour)
                            dataset1
                    })
    
        dat2 <- reactive({
                dataset2 <- dat() %>%
                          summarize(total_per_hour = sum(net_per_hour))
                dataset2
        })  
    
    
        output$r_table <- renderTable(dat(), align = "l")
        output$summary_table <- renderTable(dat2(), align = "l")
    
    }
    
    
    shinyApp(ui = ui, server = server)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-05
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      相关资源
      最近更新 更多