I would like to produce a table that spans over multiple pages using kable(). I know this is possible using xtable() with the "longtable" option, but I need kable() for other features.
Any ideas?
```{r cars, echo=TRUE, results='asis', warning=FALSE, message=FALSE}
library(knitr)
library(kableExtra)
# OUTPUT 1, fits on one page
output = rbind(mtcars[, 1:5])
kable(output, booktabs = T, format="latex", caption = "Small Output")
# OUTPUT 2, will not fit on one page
output = rbind(mtcars[, 1:5], mtcars[, 1:5])
kable(output, booktabs = T, format="latex", caption = "Large Output")
```
Update: I am dumb! "longtable=TRUE," is an option. The problem is that this changes the order of my output and kinda messes things up.
The kable() function in knitr is a very simple table generator, and is simple by design. It only generates tables for strictly rectangular data such as matrices and data frames. You cannot heavily format the table cells or merge cells.
Upon installing, inserttable registers a new RStudio Addin (Insert Table) that can be used to easily insert a table in a Rmd document. To use it, open a Rmd or R document and select “Addins –> Insert Table”.
You can try to use the kableExtra package. If you specify hold_position
in kable_styling
, you should be able to ping the table to the place you want.
Also, in the current dev version, I introduced a new feature called repeat_header
for longtable
to repeat the header row on every page. You can check it out.
kable(output, "latex", booktabs = TRUE, longtable = TRUE, caption = "Test") %>%
kable_styling(latex_options = c("hold_position", "repeat_header"))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With