Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to split kable over multiple columns?

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?

like image 677
Dambo Avatar asked May 15 '17 16:05

Dambo


2 Answers

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

like image 136
Peter Avatar answered Nov 07 '22 19:11

Peter


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

like image 3
crazy_abdul Avatar answered Nov 07 '22 19:11

crazy_abdul