闪亮的表格格式

时间:2020-04-21 12:20:34

标签: r shiny dt formattable

我是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)

2 个答案:

答案 0 :(得分:1)

我不确定您到目前为止在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")
        )
      )
    )
  )
})

答案 1 :(得分:0)

要完成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

相关问题