--- title: "Tables (HTML output)" author: "Katia Bulekova" date: "`r Sys.Date()`" output: html_document: toc: true number_sections: true --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) library(tidyverse) ``` # knitr *knitr* package includes a handy *kable()* function that produces simple tables: ```{r} data(mtcars) knitr::kable( head(mtcars)) ``` *********** # pander *pander* package is a relatively simple to use package. It can produce well-formatted tables for the outputs of summary() function for the datasets and models: ```{r} library(pander) pander( summary(mtcars[, 1:4]) ) ``` ```{r} model <- lm( mpg ~ cyl, data=mtcars ) # a simple lenear regression pander( summary(model) ) ``` *********** # DT *DT* package can display matrices and data frames as tables and provides filtering and sorting. It is especially useful to display long tables that do not fit on a single page: ```{r} DT::datatable(data=mtcars) ``` *********** # kableExtra *kableExtra* package extends functionality of the *kable* package. ```{r, warning=FALSE, message=FALSE} library(kableExtra) df <- mtcars[1:5, 1:6] df %>% kbl() ``` *** This package has a few themes: - kable_paper("hover", full_width = F) - kable_classic(full_width = F, html_font = "Cambria") - kable_classic_2(full_width = F) - kable_minimal() - kable_material(c("striped", "hover")) - kable_material_dark() ```{r} df %>% kbl() %>% kable_minimal() ``` *** ## kable_styling Function *kable_styling()* allows other ways to customize the output table: ```{r} df %>% kbl() %>% kable_styling(bootstrap_options = c("striped", "hover", "condensed")) ``` *** *kable_styling()* includes the following options: - *full_width* - TRUE or FALSE (default - TRUE) - *position* - "left", "center", "right", "float_left", "float_right" - *font_size* - a numeric value - *fixed_thead* - T or F (option to fix the header row on top) ## Column_spec This function can be used to format specific columns, e.g: ```{r} df %>% kbl() %>% kable_minimal() %>% column_spec(1, bold = T) %>% column_spec(2, background="lightyellow") ``` *** We can also use a *conditional* formatting for the values in a column based on a value of another variable: ```{r} df %>% kbl() %>% kable_minimal() %>% column_spec(1, bold = T) %>% column_spec(5, color=ifelse(df$hp==110, "red", "black")) ``` *** ## Row_spec Similar to column_spec, we can use *row_spec()* function to format rows: ```{r} df %>% kbl() %>% kable_paper(full_width = F) %>% column_spec(1, bold = T) %>% row_spec(3, background="brown", color="white", bold = TRUE) ``` *** ## Sparklines We can include inline plots into this table. The following types of plots are available: - spec_hist - spec_boxplot - spec_plot First let's prepare the data: ```{r} (mpg_list <- split(mtcars$mpg, mtcars$cyl)) ``` Then we need to define a table with the desired number of rows and columns and give columns names: ```{r} df_plot <- data.frame(cyl = c(4, 6, 8), mpg_box = "", mpg_hist = "", min = unname(sapply(mpg_list, min)), max = unname(sapply(mpg_list, max)), mean = unname(sapply(mpg_list, mean))) ``` Now we can add the plots into the first two columns: ```{r} df_plot %>% kbl(booktabs = TRUE) %>% kable_paper(full_width = FALSE) %>% column_spec(2, image = spec_boxplot(mpg_list)) %>% column_spec(3, image = spec_hist(mpg_list)) ``` For more examples see [Create Awesome HTML Table with knitr::kable and kableExtra](https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html)