【问题标题】:Shiny table formatting闪亮的表格格式
【发布时间】:2020-08-04 04:38:11
【问题描述】:

我是 Shiny 的新手,并且有一个使用 mtcars 的基本闪亮应用程序。我有多个选项卡,其中包含一些输入下拉列表并将输出显示为 DT 表。这一切都很好,但我现在想使用一些格式,比如 formattable。我想包括的一些格式是基本百分比、小数。另外,我想添加一些基于单元格的突出显示。我尝试了多种格式化功能,但没有任何运气。我在服务器端输出中添加了功能,但我无法获得正确的组合。下面是我的闪亮代码:

library(shiny)
library(dplyr)
library(DT)

ui <- fluidPage(

titlePanel("mtcars"),

sidebarLayout(

sidebarPanel(

  selectInput("cyl", 
              "cyl:",
              c(unique(as.character(mtcars$cyl)))), 

    selectInput("gear",
                "gear:",
                c("All",
                  unique(as.character(mtcars$gear)))), width=2),

    mainPanel(
      tabsetPanel(
        id = 'dataset',
        tabPanel("Summary", DT::dataTableOutput("Summary")),
        tabPanel("Detail", DT::dataTableOutput("Detail"))))))
    server <- function(input, output) {

    output$Detail <- renderDataTable(datatable({
       data <- mtcars
         if (input$cyl != "All") {
             data <- data[data$cyl == input$cyl,]
             }
         if (input$gear != "All") {
             data <- data[data$gear == input$gear,]
             }
         data
         }))

    output$Summary <- renderDataTable({

    mtcars %>% 
      filter(cyl==input$cyl)  %>% 
      group_by(gear) %>%
      summarise(mpg = median(mpg), 
                count = n())  %>% 
      ungroup() %>%
      arrange(desc(count))
    })}

shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny dt formattable


    【解决方案1】:

    要完成 Ben 的回答,即使您说要使用 formattable,我认为 DT 中有足够的选项可以按照您想要的方式自定义表格。

    这是您的示例(随机自定义,因为您没有指定单元格的格式):

    library(shiny)
    library(dplyr)
    library(DT)
    
    ui <- fluidPage(
    
      titlePanel("mtcars"),
    
      sidebarLayout(
    
        sidebarPanel(
    
          selectInput("cyl", 
                      "cyl:",
                      c(unique(as.character(mtcars$cyl)))), 
    
          selectInput("gear",
                      "gear:",
                      c("All",
                        unique(as.character(mtcars$gear)))), width=2),
    
        mainPanel(
          tabsetPanel(
            id = 'dataset',
            tabPanel("Summary", DT::dataTableOutput("Summary")),
            tabPanel("Detail", DT::dataTableOutput("Detail"))))))
    
    server <- function(input, output) {
    
      output$Detail <- renderDataTable(datatable({
        data <- mtcars
        if (input$cyl != "All") {
          data <- data[data$cyl == input$cyl,]
        }
        if (input$gear != "All") {
          data <- data[data$gear == input$gear,]
        }
        data
      }))
    
      output$Summary <- renderDataTable({
    
        your_data <- mtcars %>% 
          filter(cyl==input$cyl)  %>% 
          group_by(gear) %>%
          summarise(mpg = median(mpg), 
                    count = n())  %>% 
          ungroup() %>%
          arrange(desc(count))
    
        datatable(your_data) %>%
          formatPercentage(columns = c("mpg", "gear")) %>%
          formatRound(columns = c("count"), digits = 3) %>%
          formatStyle(columns = "mpg",
                      valueColumns = "gear", 
                      backgroundColor = styleEqual(c(3, 4, 5), c("red", "blue", "green")))
      })}
    
    shinyApp(ui = ui, server = server)
    

    有关更多详细信息,请参阅 here,有关颜色样式的几个示例,请参阅 here

    【讨论】:

    • 谢谢!这正是我一直在寻找的,并提供了一个开始添加自定义格式的解决方案。
    • @Rambo8198 不客气,别忘了给答案投票,并将解决您问题的答案标记为“答案”(在投票箭头下方)
    【解决方案2】:

    我不确定到目前为止您对 formattable 的尝试是什么,但您应该可以在闪亮的应用程序中将它与 DT 一起使用。

    这是一个您可以尝试的简单示例。这使mpg 列成为百分比。此外,如果将count 列着色为绿色。

    其他vignettes 可用于formattable 包的其他选项。

    output$Summary <- renderDataTable({
      my_data <- mtcars %>% 
        filter(cyl==input$cyl)  %>% 
        group_by(gear) %>%
        summarise(mpg = median(mpg), 
                  count = n())  %>% 
        ungroup() %>%
        arrange(desc(count))
    
      # Make percent, for example
      my_data$mpg <- percent(my_data$mpg)
    
      # Return formattable datatable
      return(
        as.datatable(
          formattable(
            my_data,
            list(
              count = color_tile("transparent", "green")
            )
          )
        )
      )
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 2016-11-03
      • 2016-03-04
      • 1970-01-01
      相关资源
      最近更新 更多