Таблица теней с extraKable в RMarkdown для pdf с использованием dplyr mutate?
Я хочу применить различные цвета затенения к таблице на основе разных наборов значений. Я создаю эту таблицу в Rmarkdown, используя kableExtra. Я хочу, чтобы значения от 0 до <.10 были оставлены в покое. Значения>=.10 и <.20 должны быть закрашены желтым цветом. и значения>=.20 будут закрашены красным.
df
name category 1 categry 2 category a category b
ab .01 .45 .19 .09
410 .12 .01 .05 .66
NW 5th .25 .22 .01 .16
Это то, что я делал с моей существующей таблицей:
library(knitr)
library(dplyr)
kable(df, caption = "warning values", digits = 2, format = "latex",
booktabs = T)%>%
kable_styling(latex_options = c("striped"))%>%
landscape()%>%
row_spec(0, angle = 45)
Я не уверен, как использовать функции mutate и cel_spec для применения ко всей таблице. Столбцы и имена строк динамически меняются с каждым отчетом.
РЕДАКТИРОВАТЬ: Мартин ответ отлично работает. Пока я не попытался очистить свои номера. Мой фактический входной файл имеет больше цифр, как и ответ Мартина. У этого также есть имена файла и строки, которые включают подчеркивание. (Это вызвало проблемы при использовании этого ответа, но я нашел обходной путь.)
#replace any "_" with escaped "\\_" for magrittR/latex compatability
names(df) <- gsub(x = names(df), pattern = "\\_", replacement =
"\\\\_")
df$name <- gsub('\\_', '\\\\_', df$name)
#format numbers
df <- format(df, digits=0, nsmall=3, scientific = FALSE)
Замена работает нормально, форматирование номера нарушает ответ. Все по-прежнему выполняется просто отлично, но я теряю раскрашенную таблицу. Мысли?
1 ответ
Вот способ сделать это. Обратите внимание, что я использовал оператор присваивания compund из magrittr.
---
title: test
output: pdf_document
---
```{r, echo = F, warning = F, message = F}
library(knitr)
library(dplyr)
library(kableExtra)
library(magrittr)
df <- data.frame(A = runif(4, 0, 1), B = runif(4, 0, 1), row.names = letters[1:4])
paint <- function(x) { # our painting function
ifelse(x < 0.1, "white", ifelse(x < 0.2, "yellow", "red"))
}
df %<>%. # compound assignment operator
mutate_if(is.numeric, function(x) { # conditional mutation, if the column type is numeric
cell_spec(x, background = paint(x), format = "latex")
})
kable(df, caption = "warning values", digits = 2, format = "latex",
booktabs = T, escape = F) %>%
landscape()%>%
row_spec(0, angle = 45)
```