Using the flextable R package
2021-02-04
Chapter 1 Overview
The flextable package provides a framework for easily create tables for reporting and publications. Functions are provided to let users create tables, modify and format their content and define their content.
Tables can be embedded within:
- R Markdown documents with support for HTML, Word, PDF and PowerPoint documents.
- Microsoft Word or PowerPoint documents with package officer.
Tables can also be rendered as R plots or graphic files (png, pdf and jpeg).
1.1 Introduction
flextable
can easily create reporting table from data.frame
. You
can merge cells, add header rows, add footer rows, change any format
and specify how data should be displayed in cells. Tables content can also
contain mixed type of content, text and images.
flextable
objects can be rendered in HTML format, Microsoft Word, Microsoft
PowerPoint and PDF.
The following table is an example of a flextable rendered in HTML.
ft <- flextable(airquality[ sample.int(10),])
ft <- add_header_row(ft,
colwidths = c(4, 2),
values = c("Air quality", "Time")
)
ft <- theme_vanilla(ft)
ft <- add_footer_lines(ft, "Daily air quality measurements in New York, May to September 1973.")
ft <- color(ft, part = "footer", color = "#666666")
ft <- set_caption(ft, caption = "New York Air Quality Measurements")
ft
Air quality | Time | ||||
Ozone | Solar.R | Wind | Temp | Month | Day |
41 | 190 | 7.4 | 67 | 5 | 1 |
194 | 8.6 | 69 | 5 | 10 | |
14.3 | 56 | 5 | 5 | ||
36 | 118 | 8.0 | 72 | 5 | 2 |
28 | 14.9 | 66 | 5 | 6 | |
19 | 99 | 13.8 | 59 | 5 | 8 |
12 | 149 | 12.6 | 74 | 5 | 3 |
23 | 299 | 8.6 | 65 | 5 | 7 |
8 | 19 | 20.1 | 61 | 5 | 9 |
18 | 313 | 11.5 | 62 | 5 | 4 |
Daily air quality measurements in New York, May to September 1973. |
The main function is flextable
. Call the function with a data.frame
as argument. If you are using RStudio or another R GUI, the table will
be displayed in the Viewer panel or in your default browser.
year | N.Amer | Europe | Asia | S.Amer | Oceania | Africa | Mid.Amer |
1951 | 45,939 | 21,574 | 2,876 | 1,815 | 1,646 | 89 | 555 |
1956 | 60,423 | 29,990 | 4,708 | 2,568 | 2,366 | 1,411 | 733 |
1957 | 64,721 | 32,510 | 5,230 | 2,695 | 2,526 | 1,546 | 773 |
1958 | 68,484 | 35,218 | 6,662 | 2,845 | 2,691 | 1,663 | 836 |
1959 | 71,799 | 37,598 | 6,856 | 3,000 | 2,868 | 1,769 | 911 |
1960 | 76,036 | 40,341 | 8,220 | 3,145 | 3,054 | 1,905 | 1,008 |
1961 | 79,831 | 43,173 | 9,053 | 3,338 | 3,224 | 2,005 | 1,076 |
The function is using default values to format the table. It is also using
a simple formatting function to create the paragraphs of text that will
be rendered in each cell. If you want to change the default appearance
of the tables, you can use the set_flextable_defaults
function.
set_flextable_defaults(big.mark = " ",
font.size = 10, theme_fun = theme_vanilla,
padding.bottom = 6,
padding.top = 6,
padding.left = 6,
padding.right = 6,
background.color = "#EFEFEF")
flextable(world_phones)
year | N.Amer | Europe | Asia | S.Amer | Oceania | Africa | Mid.Amer |
1951 | 45 939 | 21 574 | 2 876 | 1 815 | 1 646 | 89 | 555 |
1956 | 60 423 | 29 990 | 4 708 | 2 568 | 2 366 | 1 411 | 733 |
1957 | 64 721 | 32 510 | 5 230 | 2 695 | 2 526 | 1 546 | 773 |
1958 | 68 484 | 35 218 | 6 662 | 2 845 | 2 691 | 1 663 | 836 |
1959 | 71 799 | 37 598 | 6 856 | 3 000 | 2 868 | 1 769 | 911 |
1960 | 76 036 | 40 341 | 8 220 | 3 145 | 3 054 | 1 905 | 1 008 |
1961 | 79 831 | 43 173 | 9 053 | 3 338 | 3 224 | 2 005 | 1 076 |
1.2 Walkthrough: simple example
flextable has been designed to allow the construction of more complex tables. A set of functions will allow you to change colors, fonts, add headers and many other things to give you the possibility to build the tables that fit your needs.
Let’s have a step by step simple demo.
1.2.1 Creation
am | carb | gear | mpg | drat |
1 | 4 | 4 | 21.0 | 3.90 |
1 | 4 | 4 | 21.0 | 3.90 |
1 | 1 | 4 | 22.8 | 3.85 |
0 | 1 | 3 | 21.4 | 3.08 |
0 | 2 | 3 | 18.7 | 3.15 |
0 | 1 | 3 | 18.1 | 2.76 |
Optional argument col_keys
is used to only display a subset of columns.
1.2.2 Formatting
Many sugar functions can be used to format flextables: bg()
, fontsize()
, italic()
, bold()
, color()
, padding()
…
Conditional formatting can be made by using the selector arguments. All formatting functions are accepting selector arguments.
myft <- italic(myft, j = 3)
myft <- color(myft, ~ drat > 3.5, ~ drat, color = "red")
myft <- bold(myft, ~ drat > 3.5, ~ drat, bold = TRUE)
myft
am | carb | gear | mpg | drat |
1 | 4 | 4 | 21.0 | 3.90 |
1 | 4 | 4 | 21.0 | 3.90 |
1 | 1 | 4 | 22.8 | 3.85 |
0 | 1 | 3 | 21.4 | 3.08 |
0 | 2 | 3 | 18.7 | 3.15 |
0 | 1 | 3 | 18.1 | 2.76 |
1.2.3 Layout
Table layout can be modified. One can add or change header/footer rows, change cells height and width and merge cells.
myft <- add_header_row(
x = myft, values = c("some measures", "other measures"),
colwidths = c(3, 2))
myft <- align(myft, i = 1, part = "header", align = "center")
myft
some measures | other measures | |||
am | carb | gear | mpg | drat |
1 | 4 | 4 | 21.0 | 3.90 |
1 | 4 | 4 | 21.0 | 3.90 |
1 | 1 | 4 | 22.8 | 3.85 |
0 | 1 | 3 | 21.4 | 3.08 |
0 | 2 | 3 | 18.7 | 3.15 |
0 | 1 | 3 | 18.1 | 2.76 |