R shinydashboard 在值框中显示所选输入的总和

Posted

技术标签:

【中文标题】R shinydashboard 在值框中显示所选输入的总和【英文标题】:R shinydashboard display sum of selected input in a valuebox 【发布时间】:2019-07-29 07:09:37 【问题描述】:

我的问题与以下代码中的值框“value4”有关。

我创建了一个选择输入,允许用户根据该名称选择一个名称,我希望应用程序找到与所选名称相关联的项目数(项目数 =“X..setup” ) 然后在 valuebox("value4") 中显示项目总数。

我遇到的问题是获取所有项目的总和。 请在下面找到我的代码:

    setups <- read.csv("C:/Users/obria/Desktop/setUps/setUp.csv",stringsAsFactors = F, header = TRUE)
View(setups)
head(setups)
searchDF <- setups[c(1,2,3,4,7,8,9,10,11)]
#lst.Owners <- as.list(unique(setups$Owners))
lst.Owners = as.character(setups$Owners)
Owners <- unique(lst.Owners)

userInput <- sum(str_count(setups$Over.all.Status.of.Project,"WIP")) %>% groub_by(Owners)

install.packages("dplyr")
install.packages("ggplot2")
library(ggplot2)
library(dplyr)
library(shiny)
library(shinydashboard)
library(stringr)
library (DT)

ui = dashboardPage(
  #Header
  dashboardHeader(title = "Set ups dashboard"),

  #Sidebar
  dashboardSidebar(
    sidebarMenu(
      menuItem("Dashboard", tabName = "dashboard"),
      menuItem("Search", tabName = "search"),
      menuItem("Break Down", tabName = "breakDown")
    )
  ),

  #Body
  dashboardBody(tabItems(
    # First tab content
    tabItem(tabName = "dashboard",
            fluidRow(
              valueBoxOutput("value1")
              ,valueBoxOutput("value2")
              ,valueBoxOutput("value3"),

              fluidRow(
                box(
                  title= "Owner Vs Set Ups"
                  ,status = "primary"
                  ,solidheader = TRUE
                  ,collapsible = TRUE
                  ,plotOutput("nameStatus", height = "300px")
                )
                ,box(
                  title= " Pant Vs Set Ups"
                  ,status = "primary"
                  ,solidheader = TRUE
                  ,collapsible = TRUE
                  ,plotOutput("plantSetUps", height = "300px"))))
    ),
    # Second tab content #
    tabItem(tabName = "search",
            fluidRow(
              h2("Search Set ups"),
              DT::dataTableOutput("mytable")
            )),

    # Third tab content #
    tabItem(tabName = "breakDown",
              h2("Search Set ups"),
            fluidRow(
              box(
              selectInput("selectVariable", "Select Variable:",
                          choices = Owners, 
                          selected = 1))),
            fluidRow(
              valueBoxOutput("value4")
            ))))
)
server = function(input, output) 

  # Get some data #

  # Total Set ups #
  totalSetUps <- sum(setups$X..setups)

  # Number of WIPs #
  workIP1 <- sum(str_count(setups$Over.all.Status.of.Project,"WIP"))
  workIP2 <- sum(str_count(setups$Over.all.Status.of.Project,"wip"))
  workInProgress <- (workIP1 + workIP2)

  # Number of Outstanding #
  outstanding <- sum(str_count(setups$Over.all.Status.of.Project,"Outstanding"))

  # Colonia - Test Val;ue box #
  #colonia <- sum(str_count(setups$Plant,"Colonia"))

  setUpByName <- reactive (
    setups %>%
      filter(Owners == input$selectVariable) %>%
      sum(.$X..setups)
  )
  # Create the valueBoxOutput Content #
  output$value1 <- renderValueBox(
    valueBox(
      format(totalSetUps, format="d", big.mark=",")
      ,"Total Number of Set Ups"
      ,icon = icon("stats",lib="glyphicon")
      ,color = "purple")
  )
  output$value2 <- renderValueBox(
    valueBox(
      format(workInProgress, format="d", big.mark=",")
      ,"No. of project that are WIP"
      ,icon = icon("gbp",lib="glyphicon")
      ,color = "green")
  )
  output$value3 <- renderValueBox(
    valueBox(
      format(outstanding, format="d", big.mark=",")
      ,"No. of project that are Outstanding"
      ,icon = icon("menu-hamburger",lib="glyphicon")
      ,color = "yellow")
  )
  output$value4 <- renderValueBox(
    valueBox(
      format(setUpByName(), format="d", big.mark=",")
      ,"total # Set ups"
      ,icon = icon("menu-hamburger",lib="glyphicon")
      ,color = "yellow")
  )

  # Creating plot output content #
  output$nameStatus <- renderPlot(
    ggplot(data = setups, 
           aes(x=setups$Owners, y=setups$X..setup, fill=factor(Over.all.Status.of.Project))) + 
      geom_bar(position = "dodge", stat = "identity") + ylab("No. of Set ups") + 
      xlab("Owners") + theme(legend.position="bottom" 
                             ,plot.title = element_text(size=15, face="bold")) + 
      ggtitle("Owners vs No. of Set Ups") + labs(fill = "Status")
  )
  output$plantSetUps <- renderPlot(
    ggplot(data=setups, aes(x=setups$Plant, y= setups$X..setup)) +
      geom_bar(stat="identity", col="blue", fill="blue") +
      labs(title ="No of Set ups by plant")
  )
  output$mytable = DT::renderDataTable(
    setups
  )

  output$result <- renderText(
    paste("You chose", input$selectVariable)
  )




shinyApp(ui, server)

str(setups)

DF Columns Error

CodeError2 ShinyError2

Data Data Types

任何帮助将不胜感激。 谢谢

【问题讨论】:

欢迎来到 ***!请阅读有关how to ask a good question 和how to give a reproducible example 的信息。这将使其他人更容易帮助您。 没有看到你的数据对象就很难判断,但是setUpByName中的select(X..setups)group_by()之前看起来很奇怪 @RolandASc 我将 select(X..setups) 放在 group_by() 之后,不幸的是它仍然不起作用/, @RolandASc 我也上传了两张图片,一张是DF headers,一张是valuebox error,这些图片可以通过上面代码“DF Columns”&“Error”下面的链接访问跨度> 【参考方案1】:

调用select 的工作方式类似于SQL 中的select 语句,这意味着在该语句之后X..setups 是唯一剩下的列。如果您只想包含在 input$selectVariable 中选择的人的设置,您应该首先过滤 setups 数据框。其次,dplyr 中的函数返回与输入对象属于同一类的对象。您将tibble 传递给函数,因此它返回tibble。但是,您需要它是一个标量才能在valueBox 中呈现。您可以通过将过滤后的数据传递给基本 sum 函数并仅对 X..setups 列求和来使其成为标量。

setUpByName <- reactive (
  setups_filtered <- setups %>%
    filter(Owners == input$selectVariable)
  sum(setups_filtered$X..setups)
)

【讨论】:

感谢您的回答,我已经添加了上面的代码,tibble 错误现在消失了(感谢您指出该问题),但现在我有另一个错误:仅在包含所有内容的数据帧上定义数值变量。你知道我该如何解决这个问题吗?,这是我的第一个闪亮的仪表板,所以感谢您的帮助 您可以发布完整的错误消息文本或图像吗?如果您的原始问题中的问题已解决,您应该接受此答案并提出一个带有新错误消息的新问题,如果它与您关于 valueBox 的原始问题无关。 “新”错误与有问题的值框有关,我已将错误附加到闪亮和上面代码中的错误(以链接“ErrorCode2”和“ShinyError2”的形式跨度> 如果没有您的数据,很难找出错误的来源,但听起来您要求和的数据之一不是数字。我会在您的 Shiny 会话之外运行 str(setups) 以查看列的格式(或者,如果是 tbl,只需在数据上调用 print() 并显示列类型)。 我在上面上传了一个带有示例数据的链接(链接称为“数据”),设置列包含所有数字,所有者包含名称(任一列中都没有丢失数据)

以上是关于R shinydashboard 在值框中显示所选输入的总和的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用shinydashboard可视化美国投票记录

simulink关于t的函数怎么设置

R shinydashboard ——1. 基本用法

R shinydashboard ——1. 基本用法

组合框多选以在 Access 2016 中的文本框中显示所选项目

R + Shiny 哪个锤子?直的 Shiny、flexdashboard 还是 shinydashboard? [关闭]