如何在R Shiny中分别格式化多列

问题描述 投票:0回答:2

我是R Shinyapps的新手,因此,我的问题听起来有点愚蠢。

请对此表示歉意。

我正在努力根据所需的列格式将数据放入表中。

当前,该表如下所示:

RenderTable

所以表中有11列,我希望这些列的格式如下:

  • “ Col-2到Col-7”的小数点后一位数字。
  • “ Col-8至Col-10”的小数位数均为0位(无小数)。
  • “ Col-11”具有两位小数。

关于如何执行此操作的任何建议?

我已经使用下面的“ renderTable”函数来生成表:

output$table <- renderTable(align="c", digits = 1, width="auto", na="-", subset(all, PRODUCT_NAME==as.character(input$product_choice))
                          [,c("Col-1", "Col-2", "Col-3", "Col-4", "Col-5", "Col-6", "Col-7", "Col-8", 
                              paste0("Col-9 ",input$cur), paste0("Col-10 ",input$cur), "Col-11")],)

我尝试使用“数字= 1”,但将所有列的格式设置为小数点后1位。

我无法找到一种方法来将digits参数应用于不同的小数位数。但是,我需要分别格式化列我需要这里的专家来帮助我。我将非常感谢您。

r shiny shinydashboard
2个回答
1
投票

使用包DT,您可以选择要按其名称或编号进行格式化的列。另外,formatRound不是此程序包提供的唯一格式类型(请参阅formatCurrency等):

library(shiny)
library(DT)

ui <- fluidPage(
  dataTableOutput("test")
)

server <- function(input, output, session) {

  output$test <- renderDataTable({
    DT::datatable(iris) %>% 
      formatRound("Petal.Length", digits = 2, mark = "") %>%
      formatRound(1, digits = 4)
  })

}

shinyApp(ui, server)

0
投票

如果renderTable不能完全控制所需的选项,最好的办法是使用sprintf()将列格式化为字符,这将使您完全可以控制显示的内容。

之后,您可以通过使用renderTable()中的align =参数将它们作为数字向右对齐,从而可以为每列指定单独的对齐方式。

© www.soinside.com 2019 - 2024. All rights reserved.