13

I am trying to produce a "longitudinal" layout for long tables in RMarkdown with kable. For example, I would like a table to be split over two columns, like in the example below:

dd <- data.frame(state=state.abb, freq=1:50)
kable(list(state=dd[1:25,], state=dd[26:50,]))

However, this hack produces an output that looks a way worse than the normal kable output (for example the header is not in bold). Is there a "proper" way to do this using kable?

Yihui Xie
  • 28,913
  • 23
  • 193
  • 419
Dambo
  • 3,318
  • 5
  • 30
  • 79

2 Answers2

10

kable is a great tool, but has limits. For the type of table you're describing I would use one of two different tools depending on output wanted.

  • Hmisc::latex for .Rnw -> .tex -> .pdf

  • htmlTable::htmlTable for .Rmd -> .md -> .html

Here is an example of the latter:

dd <- data.frame(state=state.name, freq=1:50)
dd2 <- cbind(dd[1:25, ], dd[26:50, ])

library(htmlTable)
htmlTable(dd2,
          cgroup = c("Set 1:25", "Set 26:50"),
          n.cgroup = c(2, 2),
          rnames = FALSE)

enter image description here

Peter
  • 7,460
  • 2
  • 47
  • 68
6

You can still use Kable with a slight modification to your code.

dd <- data.frame(state=state.abb, freq=1:50)

knitr::kable(
  list(dd[1:25,], dd[26:50,]),
  caption = 'Two tables placed side by side.',
  booktabs = TRUE
)

This code is a modification of this. You can also find more information about tables on that page

crazy_abdul
  • 503
  • 6
  • 12