r - 在 kableExtra 中使用 cell_spec 时,使表中的 NA 值只是空白单元格

标签 r r-markdown knitr kableextra

a previous question 开始,我正在使用 kableExtra 中的 cell_spec 函数来更改表格中单元格的背景颜色。如何删除 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 )
```

enter image description here

最佳答案

您可以控制 knitr options(knitr.kable.NA = '') 来抑制 NA,但这在这里不起作用,因为您正在使用值为 \\cellcolor[HTML]{C8C8C8}{\\textcolor[HTML]{4D4D4D}{NA}}"

要使 options(knitr.kable.NA = '') 行工作,我们必须控制 cell_spec 函数仅在非 NA 值上运行,并且防止它向 NA 值添加额外的 HTML 代码。我们可以在 dplyr 中使用 case_whenconditionally mutate the data , 以便 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)
```

enter image description here

关于r - 在 kableExtra 中使用 cell_spec 时,使表中的 NA 值只是空白单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53678412/

相关文章:

将系统控制台输出返回到用户界面

r - Stargazer 输出出现在文本下方 - rmarkdown to pdf

r - 如何使用 knitr 生成 GitHub 风格的 Markdown 文件?

r - 如何一次替换多个值

r - 在 R 数据框中对子组进行排序

r - 如何在 R Markdown 中添加目录?

RMarkdown/pandoc 无法使用 latex 颜色命令编织 Pdf

r - 如何基于一个数据集最好地从 RMarkdown 生成多个 HTML 文件?

r - 使用 KnitR 的 R 图中的 LaTeX 图形标签?

r - 如何使用 missRanger 来估算缺失的整数值?