0

情况:

我正在绘制来自给定数据集的数据。我根据其与行总和的比率为一行中的每个单元格着色。这工作正常。代码贴在下面。

问题:

我想将单元格的值表示为百分比。例如,而不是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
  })


    }
  )
4

2 回答 2

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
于 2018-02-13T16:36:23.143 回答
0

尝试:

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

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

于 2018-02-13T16:37:37.720 回答