R Datatable:根据第三个值着色两列

时间:2015-10-23 12:20:32

标签: r datatables shiny dt

我只是不让它运行。 Colorize200dMA是-1,0或1.在-1'200d的情况下,MA'应该是红色单元格,如果是0,则不应该着色,在1的情况下,它应该是绿色。但是大多数情况下最终都没有颜色,只有红色(第一个值),但绝不是绿色。

    datatable(ResultDF,selection = 'single', options=list(dom='ft', pageLength=50)) %>%
    #datatable(ResultDF, options=list(dom='ft')) %>%
      formatStyle(
        '200d MA', 'Colorize200dMA'
        background = styleEqual(c(-1, 1), c('#e6b8b7', '#d8e4bc'))
      ) %>%
#       formatStyle(
#         '50v200d MA', "Colorize50v200dMA",
#         backgroundColor = styleInterval(0, c('#e6b8b7', '#d8e4bc'))
#       ) %>%
      formatDate(c(3,6,8), "toLocaleDateString")
    })

2 个答案:

答案 0 :(得分:1)

我认为你必须提供3种颜色,即使其中一种是白色':http://rstudio.github.io/DT/functions.html

答案 1 :(得分:1)

您可以直接实现一些简单的js / jquery代码,这些代码可以为您提供更多选项来为整个表着色。

例如,

datatable(ResultDF,selection = 'single', options=list(
dom='ft',
pageLength=50,
rowCallback = JS('function(row, data) {
        if (parseFloat(data[x]) == -1 )
          $("td:eq(x)", row).css("background-color", "red");
        else if (parseFloat(data[x]) == 0 )
          $("td:eq(x)", row).css("background-color", "white");
        else if (parseFloat(data[x]) == 1 )
          $("td:eq(x)", row).css("background-color", "green");
      }'
      )
))

其中x是你的列,在js中以0开头(例如,对于js,r列2为1)。

您可以通过这种方式添加条件格式,例如,第2列设置第3列的颜色。