有没有办法在rmarkdown中格式化表格中的单个单元格?我正在使用kable生成一个表,如下所示:
library(knitr)
kable(data.frame(c('a','b','c'),c(1,2,3)))
我希望在最后一行加粗“c”,并在表格的末尾添加一条水平线。有什么指针吗?
答案 0 :(得分:4)
使用pander
突出显示单元格,行或列非常straightforward:
> df <- data.frame(c('a','b','c'),c(1,2,3))
> emphasize.strong.cells(which(df == 3, arr.ind = TRUE))
> pander(df)
-------------------------------
c..a....b....c.. c.1..2..3.
------------------ ------------
a 1
b 2
c **3**
-------------------------------
但是在表格中添加水平线超出了markdown table specifications的范围。
答案 1 :(得分:3)
简单地概括问题以包括其他字体。 Pandoc提供了其他方法来轻松重新格式化文本,如RMarkdown Cheatsheet:
中所述*italics*
**bold**
~~strikethrough~~
此输出将支持各种输出方法,包括 PDF , html 和字:
这是一个基本的例子:
---
output: pdf_document: default
---
```{r}
knitr::kable(data.frame(char = c('*a*','**b**','~~c~~'),
num = c(1,2,3)))
```
为了更容易选择要重新格式化的单元格,我将以下函数format_cells
放在一起。
format_cells <- function(df, rows ,cols, value = c("italics", "bold", "strikethrough")){
# select the correct markup
map <- setNames(c("*", "*", "~~"), c("italics", "bold", "strikethrough"))
markup <- map[value]
for (r in rows){
for(c in cols){
# Make sure values are not factors
df[[c]] <- as.character( df[[c]])
# Update formatting
df[r, c] <- paste0(markup, df[r, c], markup)
}
}
return(df)
}
它允许用户选择需要重新格式化的单元格行和列,并选择要应用的样式。如果需要重新格式化行/列中的多个值,则可以同时选择多个单元格。这是一个例子:
library(tidyverse)
df <- data.frame(char = c('a','b','c'),
num = c(1,2,3))
df %>%
format_cells(1, 1, "italics") %>%
format_cells(2, 2, "bold") %>%
format_cells(3, 1:2, "strikethrough") %>%
knitr::kable()
进一步阅读:已编写
kableExtra
包,以提供大量表格样式的额外控制。但是,对于不同类型的输出,建议是不同的,因此HTML和LaTeX有不同的方法
答案 2 :(得分:-1)
这也有效:第一个参数是行号,因此您可以通过编程将行加粗 或使用column_spec的列。
library(kableExtra)
library(tidyverse)
kable(data.frame(letter =c('a','b','c'),number =c(1,2,3)))%>%
kable_styling()%>%
row_spec(3,bold=T,hline_after = T)