Изменить метку значений ячеек, но сохранить их окраску - PullRequest
1 голос
/ 11 марта 2019

Я использую пакет DT для раскраски таблицы частот, состоящей из числовых значений ячеек (df_numbered, см. Ниже).

library(DT)
df_numbered <- data.frame(cat1 = 1:3,
                          cat2 = 4:6,
                          cat3 = 7:9)

Однако я хотел бы заменить отображаемое числовое значение на символьную метку (например, название категории, найденной в df_labeled).

df_labeled <- data.frame(cat1 = letters[1:3],
                         cat2 = letters[4:6], 
                         cat3 = letters[7:9])

Чтобы раскрасить таблицу, я следую этим инструкциям: https://rstudio.github.io/DT/010-style.html.

brks <- quantile(df_numbered, probs = seq(.05, .95, .05), na.rm = TRUE)
clrs <- round(seq(255, 40, length.out = length(brks) + 1), 0) %>%
{paste0("rgb(255,", ., ",", ., ")")}
datatable(df_numbered) %>% 
          formatStyle(names(df_numbered), 
          backgroundColor = styleInterval(brks, clrs))

Это прекрасно работает для df_numbered. Теперь я бы хотел пометить отображаемые значения ячеек соответствующей меткой от df_labeled.

Я пытался сохранить объект с данными и заменить данные, но в процессе потерял цвет.

dt <- datatable(df_numbered) %>%
                formatStyle(names(df_numbered), 
                backgroundColor = styleInterval(brks, clrs))
dt$x$data <- df_labeled 

Мой вопрос: как сохранить цвет, но изменить отображаемое значение ячейки?

1 Ответ

1 голос
/ 12 марта 2019

Вы можете начать, связав два кадра данных:

df_numbered <- data.frame(c1 = 1:3,
                          c2 = 4:6,
                          c3 = 7:9)
df_labeled <- data.frame(cat1 = letters[1:3],
                         cat2 = letters[4:6], 
                         cat3 = letters[7:9])
df <- cbind(df_labeled, df_numbered)

Затем вы можете отформатировать следующим образом:

formatStyle(names(df_labeled), valueColumns = names(df_numbered),  
            backgroundColor = styleInterval(brks, clrs))

Но вам не нужны столбцы df_numbered, поэтому скройте их:

datatable(df, 
          options = list(
            columnDefs = list(
              list(visible = FALSE, targets = 4:6)
            )
          )) %>% 
  formatStyle(names(df_labeled), valueColumns = names(df_numbered),  
              backgroundColor = styleInterval(brks, clrs))

enter image description here

...