flextable display value

By default, the displayed content of each cell will be the result of a simple formatting. The content can also be comoosed as the result of a concatenation of several chunks.

There are formatter functions to define how columns content will be display (e.g. to define the number of decimal). This is a column-wise operation.

User can also have more control over displayed content by using function compose. The function enable to define the elements composing the paragraph and their respective formats. It can also be used to mix text chunks and images.

Column-wise functions

Theses are high level functions that should satisfy most of the usual needs. They can be used to define the formatting of one or more columns.

Each accept a prefix and suffix argument that can be used to add a currency symbol for example. Also they all have na_str argument (defaut to ""), the string to use when data are not available.

dat <- head(mtcars, n = 10)
dat[3:7, 1] <- NA
dat[, 2] <- dat[, 6] * 1000000

ft <- flextable(dat)
num_keys <- c("mpg", "disp", "drat", "wt", "qsec")
int_keys <- c("cyl", "hp", "vs", "am", "gear", "carb")

ft <- colformat_num(x = ft, col_keys = num_keys, big.mark = ",", digits = 2, na_str = "missing")
ft <- colformat_int(x = ft, col_keys = int_keys, big.mark = ",")
autofit(ft)

mpg

cyl

disp

hp

drat

wt

qsec

vs

am

gear

carb

21.00

2,620,000

160.00

110

3.90

2.62

16.46

0

1

4

4

21.00

2,875,000

160.00

110

3.90

2.88

17.02

0

1

4

4

missing

2,320,000

108.00

93

3.85

2.32

18.61

1

1

4

1

missing

3,215,000

258.00

110

3.08

3.21

19.44

1

0

3

1

missing

3,440,000

360.00

175

3.15

3.44

17.02

0

0

3

2

missing

3,460,000

225.00

105

2.76

3.46

20.22

1

0

3

1

missing

3,570,000

360.00

245

3.21

3.57

15.84

0

0

3

4

24.40

3,190,000

146.70

62

3.69

3.19

20.00

1

0

4

2

22.80

3,150,000

140.80

95

3.92

3.15

22.90

1

0

4

2

19.20

3,440,000

167.60

123

3.92

3.44

18.30

1

0

4

4

set_formatter function

It is possible to define the functions that will be used to format the data.frame values into strings. set_formatter set column formatter functions.

ft <- flextable(head(mtcars, n = 10 ), 
                   col_keys = c("gear", "mpg", "qsec"))
ft <- set_formatter(ft, 
    mpg = function(x) sprintf("%.04f", x),
    gear = function(x) sprintf("%.0f gears", x)
  )
ft <- theme_booktabs(ft)
ft <- autofit(ft)
ft

gear

mpg

qsec

4 gears

21.0000

16.460

4 gears

21.0000

17.020

4 gears

22.8000

18.610

3 gears

21.4000

19.440

3 gears

18.7000

17.020

3 gears

18.1000

20.220

3 gears

14.3000

15.840

4 gears

24.4000

20.000

4 gears

22.8000

22.900

4 gears

19.2000

18.300

compose function

flextable content can be defined with function compose.

It lets user control the formated content at the cell level of the table. It is possible to define a content for a row subset and a column as well as on the whole column. One can mix images and text (but not with PowerPoint because PowerPoint can not do it).

Below the starting point of next illustrations:

myft <- flextable( head(mtcars), 
  col_keys = c("am", "separator", "gear", "mpg", "drat", "qsec" ))
myft <- bold(myft, part = "header")
myft <- border(myft, border = fp_border( width = 0), 
  border.top = fp_border(), border.bottom = fp_border(), 
  part = "all")
myft <- align(myft, align = "right", part = "all" )
myft <- border(myft, j = ~ separator, border = fp_border(width=0), part = "all")
myft <- width(myft, j = ~ separator, width = .1)
myft

am

gear

mpg

drat

qsec

1.000

4.000

21.000

3.900

16.460

1.000

4.000

21.000

3.900

17.020

1.000

4.000

22.800

3.850

18.610

0.000

3.000

21.400

3.080

19.440

0.000

3.000

18.700

3.150

17.020

0.000

3.000

18.100

2.760

20.220

The function requires a call to as_paragraph which will concatenate text or images chunks as a paragraph.

The following example shows how to control the format of displayed values and how to associate them with specific text formatting properties (bold red text):

myft <- compose( 
  myft, j = "mpg", 
  value = as_paragraph(
    "mpg value is ", 
    as_chunk(sprintf("%.01f", mpg), props = fp_text(color = "red", bold = TRUE) ) )
  )
myft <- autofit(myft)
myft

am

gear

mpg

drat

qsec

1.000

4.000

mpg value is 21.0

3.900

16.460

1.000

4.000

mpg value is 21.0

3.900

17.020

1.000

4.000

mpg value is 22.8

3.850

18.610

0.000

3.000

mpg value is 21.4

3.080

19.440

0.000

3.000

mpg value is 18.7

3.150

17.020

0.000

3.000

mpg value is 18.1

2.760

20.220

With that system, it’s easy to concatenate multiple values:

myft <- compose( 
  myft, j = "mpg", 
  value = as_paragraph(
    "mpg value is ", 
    as_chunk(sprintf("%.01f", mpg), props = fp_text(color = "red", bold = TRUE) ), 
    " with ",
    as_chunk(sprintf("# %.0f", carb), props = fp_text(color = "gray", italic = TRUE) )
    )
  )

myft <- autofit(myft)
myft

am

gear

mpg

drat

qsec

1.000

4.000

mpg value is 21.0 with # 4

3.900

16.460

1.000

4.000

mpg value is 21.0 with # 4

3.900

17.020

1.000

4.000

mpg value is 22.8 with # 1

3.850

18.610

0.000

3.000

mpg value is 21.4 with # 1

3.080

19.440

0.000

3.000

mpg value is 18.7 with # 2

3.150

17.020

0.000

3.000

mpg value is 18.1 with # 1

2.760

20.220

Or to define specific title headers:

myft <- compose( 
  myft, j = "mpg", part = "header",
  value = as_paragraph(
    "Miles/(US) gallon ", 
    as_chunk("* with num of carb.", props = fp_text(color = "gray", vertical.align = "superscript") )
    )
  )

myft <- autofit(myft)
myft

am

gear

Miles/(US) gallon * with num of carb.

drat

qsec

1.000

4.000

mpg value is 21.0 with # 4

3.900

16.460

1.000

4.000

mpg value is 21.0 with # 4

3.900

17.020

1.000

4.000

mpg value is 22.8 with # 1

3.850

18.610

0.000

3.000

mpg value is 21.4 with # 1

3.080

19.440

0.000

3.000

mpg value is 18.7 with # 2

3.150

17.020

0.000

3.000

mpg value is 18.1 with # 1

2.760

20.220

Images

Function compose supports images insertion. Use function as_image in as_paragraph call:

am

gear

Miles/(US) gallon * with num of carb.

drat

qsec

1.000

4.000

mpg value is 21.0 with # 4

3.900

16.460

1.000

4.000

mpg value is 21.0 with # 4

3.900

17.020

1.000

4.000

mpg value is 22.8 with # 1

3.850

0.000

3.000

mpg value is 21.4 with # 1

3.080

0.000

3.000

mpg value is 18.7 with # 2

3.150

17.020

0.000

3.000

mpg value is 18.1 with # 1

2.760

minibar

Function compose supports mini barplots insertion. Use function minibar in as_paragraph call:

Sepal.Length

Sepal.Width

Petal.Length

Petal.Width

Species

3.500

1.400

0.200

setosa

3.000

1.400

0.200

setosa

3.200

1.300

0.200

setosa

3.100

1.500

0.200

setosa

3.600

1.400

0.200

setosa

3.900

1.700

0.400

setosa

3.400

1.400

0.300

setosa

3.400

1.500

0.200

setosa

2.900

1.400

0.200

setosa

3.100

1.500

0.100

setosa

linerange

Function compose supports mini linerange insertion. Use function linerange in as_paragraph call:

Sepal.Length

Sepal.Width

Petal.Length

Petal.Width

Species

3.500

1.400

0.200

setosa

3.000

1.400

0.200

setosa

3.200

1.300

0.200

setosa

3.100

1.500

0.200

setosa

3.600

1.400

0.200

setosa

3.900

1.700

0.400

setosa

3.400

1.400

0.300

setosa

3.400

1.500

0.200

setosa

2.900

1.400

0.200

setosa

3.100

1.500

0.100

setosa