Как условно раскрасить элементы таблицы, используя formattable и color_tile? - PullRequest
1 голос
/ 26 июня 2019

Я пытаюсь создать таблицу с цветными плитками, которые окрашены условно на основе среднего значения каждого столбца. В основном, плитка будет красной, если значение ниже среднего, и зеленой, если выше среднего. Я использовал простой оператор if else в своей функции ниже.

Я в конечном итоге буду использовать пакет «formattable» и функцию color_tile внутри пакета.

Я попытался написать свою собственную функцию для выбора цветов, но она только успешно помечает первую строку в моем фрейме данных.

#library(formattable) # not used in this example
green <- "#71CA97"
red <- "#ff7f7f"

col1 <- c(1.2, 4.2, 5.6, 7.1)
col2 <- c(5.0, 1.3, 10.3, 6.0)
col3 <- c(4.7, 6.3, 1.5, 6.3)
mydata <- data.frame(col1, col2, col3)

colorPicker <- function(x) {
     if(x <= 5) {return("red")}
     else {return("green")}
}

tile.colors <- lapply(c(mydata), colorPicker)

Предупреждающее сообщение: В случае если (х <= 5) {: условие имеет длину> 1, и будет использоваться только первый элемент

"tile.colors" возвращает правильные цвета, но только для первого ряда.

Я бы в конечном итоге вызвал "tile.colors" в функции форматирования, но сейчас я просто пытаюсь получить правильную функцию выбора цвета.

Есть ли более эффективный способ выполнить эту задачу?

1 Ответ

1 голос
/ 26 июня 2019

Знаете ли вы пакет DT ?

Позволяет форматировать таблицы, и есть такие функции, как formatStyle() и styleInterval(), которые вы можете использовать для раскраски значений в соответствии с интервалом или средним значением.

library(DT)
library(dplyr)

datatable(mydata) %>% 
  formatStyle(columns = colnames(mydata), color = styleInterval(c(5), c(green, red)))

enter image description here

datatable(mydata) %>% 
  formatStyle(columns = colnames(mydata), backgroundColor = styleInterval(c(5), c(green, red)))

enter image description here

...