Необходимо применить условное форматирование к одному ряду данных - PullRequest
1 голос
/ 19 марта 2019

Я пытаюсь применить условное форматирование к одной строке таблицы данных, используя styleInterval (в пределах formatStyle пакета DT). Все примеры, которые я нашел в Интернете, были либо для форматирования всей таблицы данных, ограничения для задействованных столбцов, либо для форматирования целых строк на основе значений в одном столбце.

Я хочу ограничить задействованные строки только первой строкой ('entity1') в приведенном ниже примере.

entity <- c('entity1', 'entity2', 'entity3')
value1 <- c(21000, 23400, 26800)
value2 <- c(21234, 23445, 26834)
value3 <- c(21123, 234789, 26811)
value4 <- c(27000, 23400, 26811)
entity.data <- data.frame(entity, value1, value2, value3, value4)

DT::datatable(entity.data) %>%
  formatStyle(columns = 2:5,
              backgroundColor = styleInterval(cuts = c(21200,22000),
                                              values = c('red','white','green')))

Мне не хватает способа сделать это с помощью formatStyle или мне нужно подходить к этому с другой функцией / пакетом? Спасибо!

1 Ответ

4 голосов
/ 19 марта 2019

Используйте rowCallback:

library(DT)

entity <- c('entity1', 'entity2', 'entity3')
value1 <- c(21000, 23400, 26800)
value2 <- c(21234, 23445, 26834)
value3 <- c(21123, 234789, 26811)
value4 <- c(27000, 23400, 26811)
entity.data <- data.frame(entity, value1, value2, value3, value4)

rowCallback <- c(
  "function(row, dat, displayNum, index){",
  "  if(index == 0){",
  "    for(var j=2; j<dat.length; j++){",
  "      var x = dat[j];",
  "      var color = x <= 21200 ? 'red' : x <= 22000 ? 'white' : 'green';",
  "      $('td:eq('+j+')', row)", 
  "        .css('background-color', color);",
  "    }",
  "  }",
  "}"
)

datatable(entity.data, 
          options = 
            list(rowCallback = JS(rowCallback))
)

enter image description here

...