R DT условное форматирование с использованием невидимого столбца - PullRequest
0 голосов
/ 05 сентября 2018

Этот вопрос относится к этому , но значение, которое я хочу обусловить, - это не значение ячейки, а внешний столбец, который доступен, но не показан в DT.

Мой пример прост:

DT::datatable(
  iris[,1:4],
  editable = TRUE,
  filter = c("bottom"),
  rownames = FALSE,
  extensions = 'Buttons',
  options = list(
    pageLength=21, scrollY='400px',
    dom = 'Brt'
))%>% formatStyle('Sepal.Length', fontWeight = styleInterval(5, c('normal', 'bold')))

Как бы я использовал цветовой код или применил форматирование к столбцу Sepal.Length в зависимости от значения iris$Species

  • Если Species равно setosa, тогда синий и
  • Если Species равно versicolor, тогда красный и
  • Если Species равно virginica, тогда зеленый

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Вот решение:

  • использовать полный набор данных;
  • скрыть нужный столбец с параметром columnDefs;
  • используйте Javascript в опции initComplete для установки цветов.

jscode <- "function(settings) {
var table = settings.oInstance.api();
var nrows = table.rows().count();
for(var i=0; i<nrows; i++){
var cell0 = table.cell(i,0);
var cell4 = table.cell(i,4);
var species = cell4.data();
var bgcolor;
if(species == 'setosa'){
bgcolor = 'blue';
}else if(species == 'versicolor'){
bgcolor = 'red';
}else{
bgcolor = 'green'
}
cell0.node().style.backgroundColor = bgcolor;
}
}"

DT::datatable(
  iris,
  editable = TRUE,
  filter = c("bottom"),
  rownames = FALSE,
  extensions = 'Buttons',
  options = list(
    pageLength=21, scrollY='400px',
    dom = 'Brtp',
    columnDefs = list(list(visible=FALSE, targets=4)),
    initComplete = JS(jscode)
  ))%>% formatStyle('Sepal.Length', 
                    fontWeight = styleInterval(5, c('normal', 'bold')))

enter image description here

0 голосов
/ 05 сентября 2018

Это должно сделать работу

library(DT)
DT::datatable(
  iris,
  editable = TRUE,
  filter = c("bottom"),
  rownames = FALSE,
  extensions = 'Buttons',
  options = list(
    columnDefs = list(list(targets = 4, visible = F)),
    pageLength= 150, scrollY='400px',
    dom = 'Brt'
  )) %>% formatStyle(
    'Sepal.Length', 'Species',
    backgroundColor = styleEqual(c("setosa", "versicolor","virginica"), c('steelblue', 'red', "green"))
  )

enter image description here

...