Skip to main content

R Markdown Cookbook Practical Tips and Tricks for R Markdown

Section 10.3 Other packages for creating tables

There are many other R packages that can be used to generate tables. The main reason that kable() (Section Section 10.1) and kableExtra (Section 10.2) were introduced first is not that they are better than other packages, but because we are familiar with only them.
 1 
Frankly speaking, I rarely use tables by myself, so I’m not highly motivated to learn how to create sophisticated tables.
Next we list packages that you can check out to decide which one fits your purpose best.
  • flextable [19] and huxtable [30]: If you are looking for a table package that supports the widest range of output formats, flextable and huxtable are probably the two best choices. They all support HTML, LaTeX, and Office formats, and contain most common table features (e.g., conditional formatting). More information about flextable can be found at https://davidgohel.github.io/flextable/, and the documentation of huxtable is at https://hughjonesd.github.io/huxtable/.
  • gt [28]: Allows you to compose a table by putting together different parts of the table, such as the table header (title and subtitle), the column labels, the table body, row group labels, and the table footer. Some parts are optional. You can also format numbers and add background shading to cells. Currently gt mainly supports HTML output.
     2 
    If you need the support for other output formats such as LaTeX and Word, the gtsummary package has made some extensions based on gt that look very promising: https://github.com/ddsjoberg/gtsummary.
    You can find more information about it at https://gt.rstudio.com.
  • formattable [21]: Provides some utility functions to format numbers (e.g., percent() and accounting()), and also functions to style table columns (e.g., format the text, annotate numbers with background shading or color bars, or add icons in cells). Like gt, this package also primarily supports the HTML format. You can find more information about it from its GitHub project at https://github.com/renkun-ken/formattable.
  • DT [14]: Built on top of the JavaScript library DataTables, which can turn a static table into an interactive table on an HTML page. You may sort, search, and paginate the table. DT also supports formatting the cells, works with Shiny to build interactive applications, and has included a large number of DataTables extensions (e.g., you may export the table to Excel, or interactively reorder columns). See the package repository for more information: https://github.com/rstudio/DT.
  • reactable [47]: Similar to DT, this package also creates interactive tables based on a JavaScript library. Frankly speaking, it looks better than DT in several aspects in my eyes (such as row grouping and aggregation, and embedding HTML widgets). Had reactable existed in 2015, I would not have developed DT. That said, reactable does not contain all the features of DT, so you may read its documentation and see which one fits your purpose better: https://glin.github.io/reactable/.
  • rhandsontable [51]: Also similar to DT, and has an Excel feel (e.g., you can edit data directly in the table). Visit https://jrowen.github.io/rhandsontable/ to learn more about it.
  • pixiedust [43]: Features creating tables for models (such as linear models) converted through the broom package [8]. It supports Markdown, HTML, and LaTeX output formats. Its repository is at https://github.com/nutterb/pixiedust.
  • stargazer [60]: Features formatting regression models and summary statistics tables. The package is available on CRAN at https://cran.r-project.org/package=stargazer.
  • xtable [76]: Perhaps the oldest package for creating tables—the first release was made in 2000. It supports both LaTeX and HTML formats. The package is available on CRAN at https://cran.r-project.org/package=xtable.
I’m not going to introduce the rest of packages, but will just list them here: tables [63], pander [41], tangram [64], ztable [78], and condformat [10].