I have read the bookdown book and still cannot figure this out. I am trying to create a Word report through bookdown
. I want to use kableExtra
to add striping to my tables and also to bold my last table row. Can kableExtra
be used when knitting to Word ?
This is a subset of my code :
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)
My bookdown settings are as follows:
---
title: "My Report"
author: "Me"
date: "`r Sys.Date()`"
site: "bookdown::bookdown_site"
output:
bookdown::word_document2:
fig_caption: true
documentclass: book
---
When I click on the Knit button in RStudio, I get this table:
I want the last row to be bold and I want the table striped. How do I do this ? (I also get the following error: "Currently generic markdown table using pandoc is not supported.")
Pandoc
The conversion to word is made via pandoc
. Currently pandoc only creates four type of tables,
- simple tables
- multiline_tables
- grid_tables
- pipe_tables
Some of those supported formats are demontrated in pander and in the pandoc manual p 35-39.
So you cannot create the stripped table currently with pandoc.
You also have a good summary of how you can use tables in rmarkdown.rstudio.
Pandoc v2
see the good news from David below
This was not possible but since pandoc V2 is out, you can do it with package flextable (>= 0.4.0)
(and pandoc V2). Below the code you should add into a code chunk:
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")
regulartable(tab_1_curr) %>%
bold(i = ~ myRegion %in% "BRITISH COLUMBIA") %>%
theme_zebra() %>%
autofit()
The huxtable
package is available. It includes similar table customization tools as kableExtra
. huxtable
is designed to output to LaTeX/PDF and HTML (similar to kableExtra
). However, huxtable
also includes a as_flextable
function to convert a huxtable object to a flextable object, which can be output to Word (as noted by David above). After a lot of searching, it seems to me like huxtable
is the only available package that can easily output to all of Word, HTML, and PDF with a single package.
来源:https://stackoverflow.com/questions/47704329/how-to-format-kable-table-when-knit-from-rmd-to-word-with-bookdown