闪亮的表应用程序与一列中的钱和过滤因子?

时间:2014-10-09 14:56:34

标签: shiny

我正在尝试创建一个基本上是桌子的闪亮应用程序,带有一个关于标签。

有两件事我遇到了麻烦:

  1. 其中一列是美元金额。我想格式化为1,225美元。我能得到的最接近的是使用paste0,但是当你对列进行排序时,它不能按预期工作,而且我没有得到数千个逗号。

  2. 我希望能够在一个带有“All,A,C,D”选项的下拉菜单中。如果我选择“A”,它将仅显示“Something == A”的表格。现在这是有效的,但我不确定我是否以最好的方式编码。

  3. 这是我的ui.R

    library(shiny)
    
    shinyUI(fluidPage(
      title = 'Some tittle',
      sidebarLayout(
        sidebarPanel(
          checkboxGroupInput('show_vars', 'Columns to show:',
                             c("Something", "Money"), 
                             selected = c("Money")),
          selectInput(inputId = "Something",
                      label = "Choose a category",
                      choices = c("All", "A", "C", "D"),
                      selected = "All")
          ),
    
        mainPanel(
          tabsetPanel(
            id = 'dataset',
            tabPanel('Table', dataTableOutput('mytable1')),
            tabPanel('about', includeMarkdown("about.md"))
          )
        )
      )
    ))
    

    我的服务器.R

    library(shiny)
    library(dplyr)
    DF1 = data.frame("Rank"=1:4, "Something"=as.factor(c("A","A","C","D")), "Money"=c(2345.5, 1234.67, 5.2, 9878.46))
    # change the data to have dollar sign
    DF1 = DF1 %>% mutate(Money= paste0("$",round(Money,0))) 
    original = DF1
    shinyServer(function(input, output) {
      observe({
        if(input$Something!="All"){
          DF1 = original %>% filter(Something==input$Something)
          # a large table, reative to input$show_vars
          output$mytable1 <- renderDataTable({
            DF1[, c("Rank", input$show_vars), drop = FALSE]
          })
          }else{
          DF1 = original
          output$mytable1 <- renderDataTable({
            DF1[, c("Rank", input$show_vars), drop = FALSE]
          })
          }
    })
    })
    

    和我的about.md

    # Title
    + bla
    + bla
    + bla
    

    感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我有一个解决方案,但我确信这段代码会更好。如果有人可以就如何改进它给我建议,我会很感激:-)。我的解决方案是使用scale来添加逗号

我的服务器看起来像这样:

library(shiny)
library(dplyr)
library(scales)
DF1 = data.frame("Rank"=1:4, "Something"=as.factor(c("A","A","C","D")), "Money"=c(2345.5, 1234.67, 5.2, 9878.46))
# change the data to have dollar sign
DF1 = DF1 %>% mutate(Money=round(Money,0)) %>% mutate(Money=comma_format()(Money)) %>% mutate(Money=paste0("$",Money))
original = DF1
shinyServer(function(input, output) {
  observe({
    if(input$Something!="All"){
      DF1 = original %>% filter(Something==input$Something)
      # a large table, reative to input$show_vars
      output$mytable1 <- renderDataTable({
        DF1[, c("Rank", input$show_vars), drop = FALSE]
      })
      }else{
      DF1 = original
      output$mytable1 <- renderDataTable({
        DF1[, c("Rank", input$show_vars), drop = FALSE]
      })
      }
})
})

我认为反应部分效率非常低,但我不确定如何改进它。