Таблица теней с extraKable в RMarkdown для pdf с использованием dplyr mutate? - PullRequest
0 голосов
/ 23 февраля 2019

Я хочу применить различные оттенки к таблице на основе разных наборов значений.Я создаю эту таблицу в 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 Ответ

0 голосов
/ 23 февраля 2019

Вот способ сделать это.Обратите внимание, что я использовал оператор присваивания от 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)
```

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...