提问人:Pedro Neves 提问时间:11/6/2023 最后编辑:MarkPedro Neves 更新时间:11/7/2023 访问量:52
如何从数据帧列表中打印格式化(kable)表?
How to print formated (kable) tables from a list of dataframes?
问:
我有一个由数据帧组成的列表,我想将每个列表元素打印为我的 Rmarkdown 文件上的 knitr 表。但是,我需要在将每个数据帧上的单元格传递给 kable() 之前对其进行格式化。
基本上,我需要根据一个条件(如果单元格值为 1,则为红色,如果为零,则为白色)格式化每个数据帧中单元格的背景,然后他们将每个数据帧打印为表格(书签样式)。
我正在使用以下代码,但表格未使用 booktabs 选项进行格式化:
library(tidyverse)
library(knitr)
library(kableExtra)
df1 <- data.frame("2016"=c(0,0,1,1), "2017"=c(1,1,1,1), "2018"=c(0,0,1,0), "2019"=c(1,0,0,0))
df2 <- data.frame("2016"=c(0,1,0,1), "2017"=c(1,0,0,1), "2018"=c(1,0,1,0), "2019"=c(1,0,1,1))
rownames(df1) <- c("sp1", "sp2", "sp3", "sp4")
rownames(df2) <- c("sp1", "sp2", "sp3", "sp4")
df.list <- list(df1,df2)
map(df.list, ~.x %>% mutate(across(everything(), ~cell_spec(., "html", background = ifelse(.x==1, "red","white"), color = ifelse(.x==1, "red","white")))) %>% kable("html", escape = F, booktabs = TRUE))
在我的块选项中,我有:
{r echo=FALSE, message=FALSE, warning=FALSE, eval=TRUE, results = "asis"}
似乎没有评估其中的选项......kable
有什么提示吗?
提前致谢:
佩德罗·内维斯
答:
1赞
Peter
11/7/2023
#1
您似乎正在混合 html 和 LaTeX。
该参数用于 LaTeX 输出。所以这可能是你要找的:booktabs
---
output: pdf_document
---
```{r include=FALSE}
library(dplyr)
library(purrr)
library(kableExtra)
df1 <- data.frame("2016"=c(0,0,1,1), "2017"=c(1,1,1,1), "2018"=c(0,0,1,0), "2019"=c(1,0,0,0))
df2 <- data.frame("2016"=c(0,1,0,1), "2017"=c(1,0,0,1), "2018"=c(1,0,1,0), "2019"=c(1,0,1,1))
rownames(df1) <- c("sp1", "sp2", "sp3", "sp4")
rownames(df2) <- c("sp1", "sp2", "sp3", "sp4")
df.list <- list(df1,df2)
```
```{r results='asis'}
map(df.list, ~.x |> mutate(across(everything(), ~cell_spec(., "latex", background = ifelse(.x==1, "red","white"), color = ifelse(.x==1, "red","white")))) |>
kbl(escape = FALSE,
booktabs = TRUE))
```
输出如下:
注意:调用中的数值变量是“自动”给定的“语法有效”名称。因此,如果您希望将年份作为变量名称,可能需要做一些整理或使用。data.frame()
tibble()
评论
0赞
Pedro Neves
11/7/2023
非常感谢@Peter。这很有帮助。
评论
df1 %>% mutate_all(~cell_spec(.x, background = ifelse(.x == 1, "red","white"))) %>% kable(escape = F, booktabs = T) %>% kable_styling(bootstrap_options = c("striped", "hover"))