'Simple manual RMarkdown tables that look good in HTML, PDF and DOCX

How can I manually and simply format a table in RMarkdown that will look good when converted to HTML (using the knitr and markdown packages), PDF (using pandoc and miktex) and docx (using pandoc)?

I want to be able to write small tables in RMarkdown that are not a result of R functions that look good in the three formats I use most often. So far I've found a format that looks good in 2 of the 3 formats, is 3/3 possible?

One. This looks good after Knit HTML but not good in the PDF or docx

<table>
<tr>
<td>Eggs</td>
<td>Ham</td>
</tr>
<tr>
<td>Basil</td>
<td>Tomato</td>
</tr>
</table>

Two. This one looks good after Knit HTML but not good in the PDF or docx

| Tables        | Are           | Cool  |
| ------------- |:-------------:| -----:|
| col 3 is      | right-aligned | $1600 |
| col 2 is      | centered      |   $12 |
| zebra stripes | are neat      |    $1 |

Three. This one does not look good after Knit HTML but is good in the PDF and docx (best option so far)

V1         Tweedledee       Tweedledum
--------   --------------   ----------------
Age        14               14
Height     3'2"             3'2"
Politics   Conservative     Conservative
Religion   "New Age"        Syrian Orthodox
---------  --------------   ----------------

Four. This looks good after Knit HTML and make PDF and docx (winner!) but is not the manual formatting I'm after.

```{r table1, echo=FALSE, message=FALSE, warnings=FALSE, results='asis'}
require(pander)
panderOptions('table.split.table', Inf)
set.caption("Data on cars")
pander(mtcars, style = 'rmarkdown')
```

This is how I'm making the PDF and docx files:

filen <- "table" # name of my RMarkdown file without suffix
knit(paste0(filen,".Rmd"))

# make PDF
system(paste0("pandoc -s ", paste0(filen,".md"), " -t latex -o ", paste0(filen,".pdf"), " --highlight-style=tango  -S"))

# make docx
system(paste0("pandoc -s ", paste0(filen,".md"), " -o ", paste0(filen,".docx"), " --highlight-style=tango  -S"))


Solution 1:[1]

There are many better answers to this question today as R Markdown table libraries continue to advance. Comparisons done just a few months ago are often unhelpful or misleading. So I often need to prototype a quick comparison of several options for tabular report layouts of varying complexity.

Here is a simple approach and toolset for evaluating alternative table libraries and output formats with your own data:

  1. Create a TableTester.Rmd file with code below. (Note: You can use your own df to experiment with package-specific formatting.)
  2. Generate html, pdf and docx output with TestRunner.R script (code below)

R Markdown Code - TableTester.Rmd

---
title: "Table-Evaluation"
output: 
  pdf_document: 
    latex_engine: xelatex
  html_document:
    theme: cosmo
  word_document: default
---

```{r setup-data-test, include=FALSE}

library(reactable)
library(kableExtra)
library(flextable)

df <- tibble(
  food = c("eggs", "ham", "squash", "rhubarb"),
  color = c("green", "green", "yellow", "purple"),
  class = c("imaginary", "imaginary", "real", "real")
)

```
```{r, test}
reactable(df)

kbl(df)

flextable(df)

```

R Script - TestRunner.R

for (i in c("html_document", "pdf_document", "word_document")) {
  rmarkdown::render(
    input = "TableTester.Rmd",
    output_format = i)
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1