Сделать значения NA в таблице просто пустыми ячейками при использовании cell_spec в kableExtra
Исходя из предыдущего вопроса, я использую cell_spec
Функция из kableExtra для изменения цвета фона ячеек в таблице. Как вы можете удалить текст NA и покрасить фон белым для ячеек NA, чтобы NA выглядел как пустая ячейка?
Ниже приведен пример таблицы с ячейками NA. В реальной жизни существует динамическое количество столбцов с различным количеством NA в каждом столбце.
---
output: pdf_document
---
```{r setup, include=FALSE}
library(kableExtra)
library(dplyr)
knitr::opts_chunk$set(echo = TRUE)
set.seed(2)
d <- data_frame(group = sample(LETTERS[1:5], 10, replace=TRUE), cat1=runif(10, 0, 100), cat2=runif(10, 0, 100))
d[3:5,2:3] <- NA
# Functions used to create color palette
max.val <- max(d[ , sapply(d, is.numeric)], na.rm=TRUE)
pal.fnc <- colorRamp(c("red", "yellow", "green"))
d <- d %>%
mutate_if(is.numeric, function(x) {
cell_spec(round(x,1), "latex", bold = F, color=grey(.3),
background = rgb(pal.fnc(x/max.val) %>% replace(., is.na(.), 200), maxColorValue=255))
})
```
```{r table, echo = FALSE}
kable(d,
linesep = "",
booktabs = T,
escape = F )
```
1 ответ
Вы можете контролировать Knitr options(knitr.kable.NA = '')
для подавления NA, однако здесь это не работает, так как вы перезаписываете NA со значением как \\cellcolor[HTML]{C8C8C8}{\\textcolor[HTML]{4D4D4D}{NA}}"
,
Чтобы сделать options(knitr.kable.NA = '')
линии работы, нам придется контролировать cell_spec
Функция запускается только на значениях, отличных от NA, и не позволяет добавлять дополнительный HTML-код к значениям NA. Мы можем использовать case_when
в dplyr, чтобы условно мутировать данные, так что NA остаются нетронутыми. Чтобы было легче читать, я создал функцию colourCell
который затем используется в mutate_if
Выписка перед созданием таблицы:
---
output: pdf_document
---
```{r setup, include=FALSE}
library(kableExtra)
library(dplyr)
options(knitr.kable.NA = '')
# Create Data
set.seed(2)
d <- data_frame(group = sample(LETTERS[1:5], 10, replace=TRUE), cat1=runif(10, 0, 100), cat2=runif(10, 0, 100))
d[3:5,2:3] <- NA
# Functions to format cell
max.val = max(d[ , sapply(d, is.numeric)], na.rm=TRUE)
pal.fnc <- colorRamp(c("red", "yellow", "green"))
colourCell <- function(x) {
cell_spec(round(x,1), "latex",
bold = F,
color=grey(.3),
background = rgb(pal.fnc(x/max.val) %>%
replace(., is.na(.), 200), maxColorValue=255))
}
```
```{r table, echo = FALSE}
d %>%
mutate_if(is.numeric, function(x) {
case_when(!is.na(x) ~ colourCell(x))
}) %>%
kable(
linesep = "",
booktabs = T,
escape = F)
```