Окрашивание ячеек фрейма данных на основе условия в R

У меня есть кадр данных, подобный этому примеру:

>df
id  prev_score  cur_score   change
1      10          8         -2
2      8           9          1
3      6           7          1
4      8           8          0
5      8           9          1

Я хотел бы покрасить ячейки столбца prev_score на основе значения столбца change. Например, цвет ячейки if df$change[i] > 0, df$prev_score[i] должен быть окрашен в темно-синий цвет, цвет ячейки if df$change[i] == 0, df$prev_score[i] должен быть окрашен в синий цвет, а цвет ячейки if df$change[i] < 0, df$prev_score[i] должен быть окрашен в голубой цвет.


person Sher    schedule 22.02.2020    source источник
comment
Вы собираетесь построить этот набор данных? или вы ищете цветной фрейм данных, такой как formattable?   -  person dc37    schedule 22.02.2020


Ответы (1)


В вашем вопросе неясно, хотите ли вы изменить цвет текста или ячейки.

Для цвета текста, используя formattable, вы можете сделать:

library(formattable)
formattable(df, list(
  prev_score = formatter("span", 
                         style = ~style(font.weight = "bold", color = 
                                          ifelse(change > 0,"darkblue",
                                                 ifelse(change == 0,"blue",
                                                        ifelse(change <0, "lightblue",NA)))))
))

введите здесь описание изображения

Чтобы раскрасить поле, а не текст, вы можете сделать следующее:

formattable(scores, list(
  prev_score = formatter("span", 
                         style = ~style(display = "block",
                                        font.weight = "bold", 
                                        color = "white",
                                        "border-radius" = "4px",
                                        "padding-right" = "4px",
                                        "background-color" =  
                                          ifelse(change > 0,"darkblue",
                                                 ifelse(change == 0,"blue",
                                                        ifelse(change <0, "lightblue",NA)))))
))

введите здесь описание изображения

Это отвечает на ваш вопрос?

Воспроизводимый пример

df <- data.frame(id = 1:5,
                     prev_score = c(10, 8, 6, 8, 8),
                     cur_score = c(8, 9, 7, 8, 9),
                     change = c(-2, 1, 1, 0, 1))
person dc37    schedule 22.02.2020
comment
Большое спасибо @dc37, это решение, которое я искал. - person Sher; 23.02.2020
comment
Привет @ dc37, мои данные и оператор ifelse на самом деле немного отличаются. Некоторые числа в моих данных не соответствуют оператору ifelse, и это возвращает пустые ячейки на выходе. Как я могу изменить код, чтобы у меня были числа вместо пустых ячеек, когда данные не соответствуют оператору ifelse? Спасибо - person Sher; 24.02.2020
comment
Я думаю, вам просто нужно изменить NA на transparent в конце ifelse - person dc37; 24.02.2020
comment
Спасибо @dc37, я пробовал transparent и "transparent", но ни один из них не сработал - person Sher; 24.02.2020
comment
Вы пытаетесь раскрасить ячейку? или раскрасить текст? - person dc37; 24.02.2020
comment
я раскрашиваю клетку - person Sher; 24.02.2020
comment
Попробуйте заменить NA на black и посмотрите, сможете ли вы увидеть ячейки, не соответствующие условиям. - person dc37; 24.02.2020
comment
А, он действительно есть, его не видно, потому что он белого цвета. Я вижу числа после изменения цвета ячейки на черный. Большое спасибо - person Sher; 24.02.2020
comment
Давайте продолжим обсуждение в чате. - person Sher; 25.02.2020