Использование условных операторов для изменения цвета значений в таблице (kableextra) - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь создать таблицу, используя kableextra. Я хочу изменить цвета значений, чтобы эти значения> = 85 были изменены на зеленый, а те <50 окрашены в красный цвет, используя функцию cell_spec с помощью цикла, который выполняет итерации по фрейму данных, и условных операторов, которые задают значения, которые нужно изменить. </p>

Мне удалось изменить одно значение, используя документацию kableextra и указав каждый столбец, который я хочу изменить, но я хочу использовать несколько операторов if вместо ifelse, если только нет лучшего способа.

Код, который я использовал до сих пор:

library(dplyr)
library(kableExtra)

Subject <- c("Database", "Java", "C++", "Physics", "Mathematics", "English", "Chemistry", "Networks", "Security")
A <- c(69, 64, 70, 57, 80, 34, 45, 56, 96)
B <- c(70, 74, 68, 76, 71, 56, 56, 45, 30)
C <- c(84, 58, 87, 78, 67, 67, 43, 34, 56)
D <- c(78, 83, 68, 72, 90, 48, 23, 23, 46)
E <- c(79, 55, 91, 71, 34, 26, 76, 67, 75)
F <- c(80, 72, 64, 45, 66, 76, 45, 56, 54)
G <- c(90, 67, 76, 51, 45, 59, 33, 64, 34)
H <- c(60, 59, 88, 90, 76, 34, 43, 72, 45)


student_results <- data.frame(Subject, A, B, C, D, E, F, G, H)

rownames(student_results) <- c("Database", "Java", "C++", "Physics", "Mathematics", "English", "Chemistry", "Networks", "Security")

student_results %>%
    mutate(
      A = cell_spec(A, "html", color = ifelse(A >= 85, "coral", "black")),
      B = cell_spec(B, "html", color = ifelse(B >= 85, "coral", "black")),
      C = cell_spec(C, "html", color = ifelse(C >= 85, "coral", "black")),
      D = cell_spec(D, "html", color = ifelse(D >= 85, "coral", "black")),
      E = cell_spec(E, "html", color = ifelse(E >= 85, "coral", "black")),
      F = cell_spec(F, "html", color = ifelse(F >= 85, "coral", "black")),
      G = cell_spec(G, "html", color = ifelse(G >= 85, "coral", "black")),
      H = cell_spec(H, "html", color = ifelse(H >= 85, "coral", "black"))
    ) %>%
    kable(format = "html", escape = FALSE) %>%
    kable_styling("striped", full_width = FALSE)

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

Спасибо

1 Ответ

0 голосов
/ 09 апреля 2019

Чтобы изменить несколько столбцов одновременно, вы можете использовать mutate_at.Чтобы иметь несколько условий, вы можете использовать вложенные ifelse условия.Вложенные ifelse через некоторое время становятся громоздкими, поэтому вы можете вместо этого заглянуть в case_when.

student_results %>%
    mutate_at(vars(A:H), ~ cell_spec(
        ., "html", 
        color = ifelse(. >= 85, "coral", ifelse(. < 50, "red", "black"))
    )) %>%
    kable(format = "html", escape = FALSE) %>%
    kable_styling("striped", full_width = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...