如何在使用bookdown将.rmd文件转换为Word文档时,格式化kable表格?

20

我已经阅读了bookdown书籍,但还是无法弄清楚。 我正在尝试通过bookdown创建Word报告。 我想使用kableExtra为我的表格添加条纹,并将我的最后一行表格加粗。 在knitting到Word时可以使用kableExtra吗?

这是我的代码子集:

library(dplyr)    
knitr::opts_chunk$set(echo = TRUE)
library(knitr)  # required for kable
library(kableExtra)  # required for kableExtra
options(knit.r.table.format = "markdown")

myRegion <- c("a", "b", "c")
Current_Perc_1 <- c(85.9, 90.8, 89.7)
Current_Perc_2 <- c(88.0, 91.0, 89.0)
tab_curr_est_2_times <- cbind(myRegion, Current_Perc_1, Current_Perc_2)
tab_curr_est_2_times <- as.data.frame(tab_curr_est_2_times, stringsAsFactors = FALSE)
tab_curr_est_2_times$Current_Perc_1 <- as.double(tab_curr_est_2_times$Current_Perc_1)
tab_curr_est_2_times$Current_Perc_2 <- as.double(tab_curr_est_2_times$Current_Perc_2)
tab_curr_est_2_times$curr_change_1_to_2 <- tab_curr_est_2_times$Current_Perc_2 - tab_curr_est_2_times$Current_Perc_1

tab_1_curr <- tab_curr_est_2_times
tab_1_curr[ nrow(tab_1_curr)+1 , ] <- NA
tab_1_curr$myRegion[ nrow(tab_1_curr) ] <- "BRITISH COLUMBIA"
tab_1_curr$Current_Perc_1[ nrow(tab_1_curr) ] <- 88.4
tab_1_curr$Current_Perc_2[ nrow(tab_1_curr) ] <- 89.3
tab_1_curr$curr_change_1_to_2[ nrow(tab_1_curr) ] <- 0.9

knitr::kable(tab_1_curr, digits = 1, align = "lccc", position = "c", 
         caption = "\\: my table caption here") %>%
  kable_styling("striped") %>%
  row_spec(nrow(tab_1_curr), bold = TRUE)

我的bookdown设置如下:

--- 
title: "My Report"
author: "Me"
date: "`r Sys.Date()`"
site: "bookdown::bookdown_site"
output:
  bookdown::word_document2:
    fig_caption: true
documentclass: book
---
当我在RStudio中单击"Knit"按钮时,我会得到这个表格: “” 我希望最后一行加粗,并且表格有条纹。我该如何做?(我还遇到以下错误:“当前不支持使用Pandoc的通用Markdown表格。”)

2
如果你想在Word中创建报告,你应该了解officer包。kableExtra包仅为htmllatex表格提供精细控制。 - Kevin Arseneau
谢谢@KevinArseneau。我会查看officer - JHawkins
3个回答

19

以前这是不可能的,但自从 pandoc V2 推出后,你可以使用 flextable (>= 0.4.0)(和 pandoc V2)包来实现。在下面的代码块中添加以下代码:

library(magrittr)
library(flextable)

tab_1_curr <- structure(list(myRegion = c("a", "b", "c", "BRITISH COLUMBIA"
 ), Current_Perc_1 = c(85.9, 90.8, 89.7, 88.4), Current_Perc_2 = c(88, 
 91, 89, 89.3), curr_change_1_to_2 = c(2.09999999999999, 0.200000000000003, 
 -0.700000000000003, 0.9)), .Names = c("myRegion", "Current_Perc_1", 
 "Current_Perc_2", "curr_change_1_to_2"), row.names = c(NA, 4L
 ), class = "data.frame")


flextable(tab_1_curr) %>% 
  bold(i = ~ myRegion %in% "BRITISH COLUMBIA") %>% 
  theme_zebra() %>% 
  autofit()

2
谢谢!flextable刚刚救了我的命。 - mysteRious

9

huxtable包可用。它包括与kableExtra类似的表格自定义工具。 huxtable旨在输出到LaTeX/PDF和HTML(类似于kableExtra)。然而,huxtable还包括一个as_flextable函数,可将huxtable对象转换为flextable对象,该对象可以输出到Word中(正如David所述)。经过大量搜索,我觉得huxtable是唯一一个可以使用单个包轻松输出到Word、HTML和PDF的可用包。


5

Pandoc版本≥2

是的,这可以通过Pandoc实现(请参见David的回答)。

以下是原始答案:

Pandoc版本<2

转换为Word是通过pandoc完成的。当前pandoc仅创建四种类型的表格:

  • 简单表格
  • 多行表格
  • 网格表格
  • 管道表格

其中一些支持的格式在panderpandoc手册 p 35-39中有演示。

因此,目前无法使用pandoc创建削减表格

您还可以在rmarkdown.rstudio中了解如何使用表格的好总结。


8
听到无法将 kableExtra 中的内容编织到 Word 文档中是很让人清爽的。这一点在任何地方都没有给我明确说明,所以我很感激。希望这能够节省未来其他人数小时/数天的时间! - JHawkins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接