如何在R闪亮应用中使用color_tiles在formattable中显示百分比?

时间:2018-02-13 16:23:44

标签: r shiny formattable

情况:

我正在绘制来自给定数据集的数据。我根据行总和的比例将每个单元格连续着色。这很好用。代码发布在下面。

问题:

我想将细胞的值表示为百分比。例如,我需要0.547而不是54.7 %

问题:

如何修改代码以显示百分比?

library(shiny)
library(DT)
library(formattable)


  shinyApp(


    ui = fluidPage(
      fluidRow(
        column(12,
          DT::dataTableOutput('mytable')
        )
      )
    ),


    server = function(input, output) {



        myIris=iris[c(1,89,124),c("Species","Sepal.Length","Sepal.Width","Petal.Length","Petal.Width")]
        myIris$sumOfRow=myIris$Sepal.Length+myIris$Sepal.Width+myIris$Petal.Length+myIris$Petal.Width
        myIris$Sepal.Length=myIris$Sepal.Length/myIris$sumOfRow
        myIris$Sepal.Width=myIris$Sepal.Width/myIris$sumOfRow
        myIris$Petal.Length=myIris$Petal.Length/myIris$sumOfRow
        myIris$Petal.Length=myIris$Petal.Length/myIris$sumOfRow
        myIris$Petal.Width=myIris$Petal.Width/myIris$sumOfRow

    myFormattable <- formattable(myIris, lapply(1:nrow(myIris), function(row, col=1:5) {
    area(row, col=1:5) ~ color_tile("transparent", "red")
    }))
    myDatatable=as.datatable(myFormattable)



   output$mytable=DT::renderDataTable({
        myDatatable
  })


    }
  )

2 个答案:

答案 0 :(得分:0)

您可以使用formatPercentage()。您只需要将列乘以100即可。

library(shiny)
library(DT)
library(formattable)

 shinyApp(


    ui = fluidPage(
      fluidRow(
        column(12,
          DT::dataTableOutput('mytable')
        )
      )
    ),


    server = function(input, output) {



        myIris=iris[c(1,89,124),c("Species","Sepal.Length","Sepal.Width","Petal.Length","Petal.Width")]
        myIris$sumOfRow=myIris$Sepal.Length+myIris$Sepal.Width+myIris$Petal.Length+myIris$Petal.Width
        myIris$Sepal.Length=myIris$Sepal.Length/myIris$sumOfRow
        myIris$Sepal.Width=myIris$Sepal.Width/myIris$sumOfRow
        myIris$Petal.Length=myIris$Petal.Length/myIris$sumOfRow
        myIris$Petal.Length=myIris$Petal.Length/myIris$sumOfRow
        myIris$Petal.Width=myIris$Petal.Width/myIris$sumOfRow

    myFormattable <- formattable(myIris, lapply(1:nrow(myIris), function(row, col=1:5) {
    area(row, col=1:5) ~ color_tile("transparent", "red")
    }))
    #myDatatable=as.datatable(myFormattable)



   output$mytable=DT::renderDataTable({
myFormattable$Sepal.Width_p <- myFormattable$Sepal.Width*100
        datatable(myFormattable) %>% formatPercentage("Sepal.Width_p")
  })


    }
  )

编辑:

您可以简单地使用函数percent

myIris$Sepal.Width_p <- percent(myIris$Sepal.Width)

        myFormattable <- formattable(myIris, lapply(1:nrow(myIris), function(row, col=1:5) {
        area(row, col=1:5) ~ color_tile("transparent", "red")
        }))

然后:

myDatatable=as.datatable(myFormattable)
myDatatable

答案 1 :(得分:0)

尝试:

output$mytable <- DT::renderDataTable({
  datatable(myFormattable) %>% formatPercentage('Sepal.Length', 2)
})

但是,这会改变您的颜色条样式。我不熟悉formattable包,但你可以参考How to Style DT使用DT的方法来应用你的样式。