Как закрасить фон ячейки в datatable (пакет DT) в R с именами столбцов и строк или индексами? - PullRequest
0 голосов
/ 12 апреля 2019

Вот пример.Я создал фрейм данных и использую его для создания таблицы данных для визуализации.Как вы можете видеть, имя моего столбца и строка из первого столбца указывают условия от A и B. Что я хочу сделать, это изменить цвет фона определенной ячейки в этой таблице данных.Легко выбрать столбец для изменения, как описано в этой ссылке (https://rstudio.github.io/DT/010-style.html). Однако мне не очевидно, как указать строку, которую я хочу выбрать.

Чтобы дать вам большеВ контексте я занимаюсь разработкой приложения Shiny и хотел бы создать таблицу данных, позволяющую мне окрашивать ячейки на основе условий A и B. Например, если A is less than 1 и B is between 1 and 2,Я хотел бы иметь возможность выбрать вторую ячейку из столбца A is less than 1. Для этого мне нужно знать, как указать номер строки или имя строки. На данный момент я знаю только, как указать строки на основесодержимое строк, как показано в этом примере.

library(tibble)
library(DT)

dat <- tribble(
  ~`A/B`,                ~`A is less than 1`, ~`A is between 1 and 2`,  ~`A is larger than 2`,
  "B is less than 1",                    10,                      30,                     30,
  "B is between 1 and 2",                 20,                      10,                     30,
  "B is larger than 2",                   20,                      20,                     10
)


datatable(dat, filter = "none", rownames = FALSE, selection = "none",
          options = list(dom = 't', ordering = FALSE)) %>% 
  formatStyle(
  'A is less than 1',
   backgroundColor = styleEqual(20, "orange")
)

enter image description here

1 Ответ

3 голосов
/ 12 апреля 2019

Я не уверен, что получу вопрос, но если вы хотите изменить цвет фона ячейки, заданной индексом строки и индексом столбца (это то, что я понимаю), вы можете сделать:

changeCellColor <- function(row, col){
  c(
    "function(row, data, num, index){",
    sprintf("  if(index == %d){", row-1),
    sprintf("    $('td:eq(' + %d + ')', row)", col),
    "    .css({'background-color': 'orange'});",
    "  }",
    "}"  
  )
}
datatable(dat, 
          options = list(
            dom = "t",
            rowCallback = JS(changeCellColor(1, 2))
          )
)
...