基于逻辑向量格式化DT :: datatables

时间:2017-06-23 05:20:48

标签: r shiny conditional-formatting dt htmlwidgets

我目前希望使用dataFrameshiny包为我的DT使用格式化格式。我的表看起来大致相同。

| val1     | val2  | 
| ---------|------ |
| a        | b     |
| a        | a     |
| b        | b     |

只要满足val1,我想将val1[i] == val2[i]的textcolor更改为红色。因此,结果表应如下所示。

| val1     | val2  | 
| ---------|------ |
| a        | b     |
| a*       | a     |    * = red
| b*       | b     |

从文档中,我发现可以使用DT::formatstyle应用条件格式化。但是,那里指定的条件必须依赖于表的一列。当然,我可以使用

创建一个新列
dat$condition = ( val1 == val2 )

但是此列也显示在我不想发生的小部件中。 (除非有一种方法可以删除datatables个对象的列)。我正在寻找一个函数addcolor_conditional来做类似的事情

condition_vector = ( val1 == val2 )
datatable( mtcars ) %>% addcolor_conditional( 
  condition_vector, color = "red" )

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

您可以使用rowCallback参数和一些小js代码来执行此操作。看看下面的最小代码:

library(shiny)
 library(DT)


 data_ <- data.frame(A = 1:5, B=c(1,3,6,4,5))

 ui <- fluidPage(


   dataTableOutput("table")
 )

 server <- function(input, output){

   output$table <- renderDataTable({
    datatable(data_, rownames = FALSE, options = list(rowCallback = JS(
                     "function(nRow, aData) {
                     if (parseFloat(aData[0]) >= parseFloat(aData[1])){
                     $('td:eq(0)', nRow).css('color', 'red');
                     }
                     }")
                   ))


   }) 

 }

 shinyApp(ui = ui, server = server)

使用代码获得的输出如下:

enter image description here

希望它有所帮助!