我正在尝试使用 r markdown、kable 和 kableExtra 输出乳胶表。当我使用选项 row.names=FALSE 而不是 row.names=TRUE 时,乳胶代码会生成 \vphantom 代码,这会产生创建 pdf 的错误。看来问题与 row_spec 选项有关。
这是 Rmarkdown 代码(.Rmd 文件):
---
title: "Test"
output:
pdf_document:
fig_caption: true
keep_tex: true
---
{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
{r}
library(knitr)
library(kableExtra)
temp <- mtcars[1:5,1:5]
kable(temp, format = "latex", booktabs = F,row.names=F) %>%
kable_styling(position = "center") %>%
row_spec(1, bold = T, background = "red")
Run Code Online (Sandbox Code Playgroud)
错误是:
!扫描 \check@nocorr@ 时发现禁止的控制序列。\par l.105 ...颜色{红色} \textbf{21.0 &\vphantom{1} 6} & \textbf{160} & \textbf{...
怎么了?
我正在 rMarkdown 中编写文档,需要在生成 PDF 之前格式化表格。问题是我无法在kable使用命令添加的标题中插入新行add_headers_above。
目前,文本“月份(人)”(这是使用该命令添加的第一个标题)显示为一行。我想打破这一点,以便在“月”和“(人)”之间插入新行。
动机只是为了节省水平页面空间,以便我可以在一张 A4 纸上按大小放置两个表格。
我尝试\n在add_headers_above命令中包含:
[...] %>%
add_header_above(c(" ", 'Month \n (persons)' = 1, "TTY \n (persons)" = 1, "TTY \n (% chg.)" = 1))
但这并没有奏效。
---
output: pdf_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(knitr)
library(kableExtra)
library(tibble)
```
```{r}
df <- tribble(~Location, ~Jan_Qrt, ~Jan_year, ~growth,
"New South Wales", 16000, 403300, 3.30,
"Victoria", -21200, 134100, 3.50,
"Queensland", 2100, 100200, 3.20,
"South Australia", 19700, …Run Code Online (Sandbox Code Playgroud) 我刚开始使用kableExtra库来使我的表格在 PDF 输出中看起来更好。
但是当我kable()在 R Notebook 文件中使用函数时,它不显示输出。相反,我看到输出应该是一个大的空白区域。
这是一个屏幕截图:
当我Knit将文件转换为 PDF 时,我可以看到输出。
这是一个屏幕截图:

有没有办法让输出同时出现在 Notebook 和 PDF 中?这是我的代码:
---
title: "R Notebook"
output:
pdf_document: default
html_notebook: default
---
```{r message=FALSE, warning=FALSE}
library(knitr)
library(kableExtra)
library(dplyr)
#plot(cars)
```
```{r}
cars %>%
slice(1:10) %>%
select(speed, dist) %>%
kable(format = "latex", booktabs = T) %>%
column_spec(column = 1:2, width = "0.5in")
```
Run Code Online (Sandbox Code Playgroud) 我想知道是否有一种方法可以强制脚注适应表格的宽度(并换行到第二行)kable(我正在将 .Rmd 编织为 PDF,因此格式是乳胶)。add_footnote()和两者我都用过footnote()。如果脚注超出表格的宽度,该add_footnote函数实际上会将脚注包装到第二行,但它也会强制使用上标(因此,我的表格中无法使用上标)。 footnote使我可以选择删除上标,但我不确定如何使其匹配格式add_footnote并将比表格宽的脚注包装到第二行。另一种解决方案是删除上标add_footnote
\captionsetup[table]{labelformat=empty}
```{r packs}
library(pacman)
p_load(tidyverse,knitr,kableExtra,janitor)
mydf <-data_frame(x=1:4,y=2:5,z=3:6)
fn1='This the footnote 1'
fn2='This is footnote 2 and is much longer'
mydf %>%
kable(format='latex',booktabs=T,
col.names=c('X','Y','Z'),
caption=c('This method stretches', 'my table out in an ugly way')) %>%
kable_styling(latex_options = c('hold_position')) %>%
footnote(general=c(fn1, fn2),general_title="")
mydf %>%
kable(format='latex',booktabs=T,
col.names=c('X','Y','Z'),
caption=c('This method ruins my title', 'and left justifies my table')) %>%
kable_styling(latex_options = c('hold_position')) %>%
footnote(general=c(fn1, fn2),general_title="",threeparttable = T) …Run Code Online (Sandbox Code Playgroud) 假设我有下表(数据集)并将其编织在 rmarkdown 文档中:
```{r global_options, include=FALSE, eval=TRUE, results='asis'}
knitr::opts_chunk$set(echo=FALSE, #this sets up chunks, can then edit ones we want individually
warning=FALSE,
message=FALSE,
eval=FALSE)
library(kableExtra)
```
```{r , eval=TRUE, results='asis'}
test <- structure(list(`Dependent: Surv(time, status)` = c("Age", "",
""), c("<40 years", "40-59 years", "60+ years"), `HR (univariable)` = c("-",
"0.76 (0.53-1.09, p=0.132)", "0.93 (0.66-1.31, p=0.668)"), `HR (multivariable)` = c("-",
"0.79 (0.55-1.13, p=0.196)", "0.98 (0.69-1.40, p=0.926)")), .Names = c("Dependent: Surv(time, status)",
"", "HR (univariable)", "HR (multivariable)"), row.names = c(NA,
3L), class = …Run Code Online (Sandbox Code Playgroud) 我有一个data.frame想要以格式化方式打印在 RMarkdown 文档(HTML 输出)中的文件。我需要它的 3 个功能我无法同时获得:
我可以通过以下方式轻松滚动获得标题kableExtra:
library(kableExtra)
cars %>%
kable(caption = 'Cars') %>%
kable_styling(bootstrap_options = c('striped', 'condensed')) %>%
scroll_box(width = "500px", height = "200px")
Run Code Online (Sandbox Code Playgroud)
但是当我向下滚动时,标题和列标题也会滚动,并且很难看到每一列是什么。
通过添加到 YAML 标头,我可以从默认打印行为中df_print: paged获得非常漂亮的分页输出(请参阅R Markdown:权威指南):
---
title: "Motor Trend Car Road Tests"
output:
html_document:
df_print: paged
---
```{r}
cars
```
Run Code Online (Sandbox Code Playgroud)
但是,据我所知,没有办法为此添加标题或说明。我可以使用 markdown 添加标题,但生成表格的代码将卡在标题和表格之间。我还缺少其他选项吗?
我目前正在使用kable_styling()kableExtra 中的以下内容:
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
Run Code Online (Sandbox Code Playgroud)
我可以在 YAML 元数据的 R Markdown 文档中将表格样式设置为 kable,如下所示:
output:
html_document:
df_print: kable
Run Code Online (Sandbox Code Playgroud)
但这只是以纯 HTML 输出我的所有表格。我不知道如何将我的应用kable_styling()到所有块。目前我必须在每一块中完整地写出以下内容:
df %>%
kable() %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
Run Code Online (Sandbox Code Playgroud)
问题
如何将 my 应用于kable_styling()所有代码块,而不必将其写在所有代码块中?
我正在尝试使用kable并kableextra创建一个具有不同分组标题但子标题中具有相同列名的表
例如,如果您查看Create Awesome LaTeX Table with knit::kable 和 kableExtra的“分组列/标题”部分(第 14 页) ,它会被分组,但子标题名称不同:
library(knitr)
library(kableExtra)
dt <- mtcars[1:5, 1:6]
kable(dt, "latex", booktabs = T) %>%
kable_styling() %>%
add_header_above(c(" " = 1, "Group 1" = 2, "Group 2" = 2, "Group 3" = 2))
Run Code Online (Sandbox Code Playgroud)
我想做的是将汽车作为组进行类似的操作(例如仅使用两辆车):
Mazda RX4 | Datsun 710
----------------------
mpg | cyl | mpg | cyl
----------------------
21.0| 6 | 21.4| 6
Run Code Online (Sandbox Code Playgroud)
或者作为另一个例子:
Group 1 | Group 2
------------------
x | y | x …Run Code Online (Sandbox Code Playgroud) 我正在 Rmarkdown (特别是 bookdown)中写我的论文,并使用 knit 将其编译成 PDF。
当我编织它时,除了表格和数字之外,一切都很完美。
这些表格(用 kable 生成)看起来几乎完美,但包装如下(其中 [table] 是正确呈现的表格):
\begin{table}
\caption{(#tab:rchunk_label) table_caption}
[table]
\end{table}
Run Code Online (Sandbox Code Playgroud)
因此,标题不会出现在表格上。此外,这会导致文档其余部分的文本对齐发生变化。如果我不包含标题,问题就会消失,但我相信乳胶输出支持标题。
除了在实际标题之前的括号中包含 r 块标签的标题之外,图形渲染正确。
如果相关,“lot”(表格列表)函数不会识别文档中的任何表格,而“lof”(图表列表)函数则可以识别。
到目前为止,我已经尝试将结果设置为“asis”,将代码复制到另一个文档中,并检查原始乳胶输出。原始乳胶似乎是正确的(没有重复的 \begin{table} 或任何东西)。
我正在使用 kable 和 kableExtra 并希望显示一个包含百分比列的表格(格式为“95%”)。我还想根据百分比值(具有多种颜色和切点)对单元格背景进行条件格式设置。另外,还混杂了一些NA。
我已经尝试了这篇文章中的一些方法,但不喜欢 cell_spec 背景着色不会对整个单元格进行着色,因此更愿意在 kable 中使用 column_spec 。然而,我发现的所有显示百分比的选项都将百分比转换为字符变量,这限制了我执行条件格式的能力。
当我简化示例代码以发布到此处时(经过几个小时的错误),我终于使用 startWith 使其工作(在本例中这是一个不错的解决方案,因为我的切点位于 80% 和 90%,但对于所有情况)。
df <- tibble(
x=c(1:6),
percents =c (1, .95, .82, .77, .62, NA)
)
df$percents <- percent(df$percents, accuracy = 1)
kable(df, booktabs=TRUE, escape=FALSE ) %>%
kable_styling() %>%
column_spec(2, background = if_else(startsWith(df$percents, '100'), "Darkgrey",
if_else(startsWith(df$percents, '9'), "Darkgrey",
if_else(startsWith(df$percents, '8'), "silver", "lightgray",
"white"), "white"), "white"))
Run Code Online (Sandbox Code Playgroud)
我很好奇是否有人有另一种解决方案来保留将百分比值作为数字而不是字符来使用的能力。
谢谢你!
kable ×10
r ×9
r-markdown ×7
kableextra ×4
knitr ×4
latex ×3
bookdown ×1
footnotes ×1
percentage ×1
r-rownames ×1