With numeric values in a gt table we can transform those to index values, usually based on letters. These characters can be derived from a specified locale and they are intended for ordering (often leaving out characters with diacritical marks).
Usage
fmt_index(
data,
columns = everything(),
rows = everything(),
case = c("upper", "lower"),
index_algo = c("repeat", "excel"),
pattern = "{x}",
locale = NULL
)
Arguments
- data
The gt table data object
obj:<gt_tbl>
// requiredThis is the gt table object that is commonly created through use of the
gt()
function.- columns
Columns to target
<column-targeting expression>
// default:everything()
Can either be a series of column names provided in
c()
, a vector of column indices, or a select helper function (e.g.starts_with()
,ends_with()
,contains()
,matches()
,num_range()
andeverything()
).- rows
Rows to target
<row-targeting expression>
// default:everything()
In conjunction with
columns
, we can specify which of their rows should undergo formatting. The defaulteverything()
results in all rows incolumns
being formatted. Alternatively, we can supply a vector of row captions withinc()
, a vector of row indices, or a select helper function (e.g.starts_with()
,ends_with()
,contains()
,matches()
,num_range()
, andeverything()
). We can also use expressions to filter down to the rows we need (e.g.,[colname_1] > 100 & [colname_2] < 50
).- case
Use uppercase or lowercase letters
singl-kw:[upper|lower]
// default:"upper"
Should the resulting index characters be rendered as uppercase (
"upper"
) or lowercase ("lower"
) letters? By default, this is set to"upper"
.- index_algo
Indexing algorithm
singl-kw:[repeat|excel]
// default:"repeat"
The indexing algorithm handles the recycling of the index character set. By default, the
"repeat"
option is used where characters are doubled, tripled, and so on, when moving past the character set limit. The alternative is the"excel"
option, where Excel-based column naming is adapted and used here (e.g.,[..., Y, Z, AA, AB, ...]
).- pattern
Specification of the formatting pattern
scalar<character>
// default:"{x}"
A formatting pattern that allows for decoration of the formatted value. The formatted value is represented by the
{x}
(which can be used multiple times, if needed) and all other characters will be interpreted as string literals.- locale
Locale identifier
scalar<character>
// default:NULL
(optional
)An optional locale identifier that can be used for formatting values according to the locale's rules. Examples include
"en"
for English (United States) and"fr"
for French (France). We can callinfo_locales()
for a useful reference for all of the locales that are supported. A locale ID can be also set in the initialgt()
function call (where it would be used automatically by any function with alocale
argument) but alocale
value provided here will override that global locale.
Compatibility of formatting function with data values
fmt_index()
is compatible with body cells that are of the "numeric"
or
"integer"
types. Any other types of body cells are ignored during
formatting. This is to say that cells of incompatible data types may be
targeted, but there will be no attempt to format them.
Compatibility of arguments with the from_column()
helper function
from_column()
can be used with certain arguments of fmt_index()
to obtain
varying parameter values from a specified column within the table. This means
that each row could be formatted a little bit differently. These arguments
provide support for from_column()
:
case
index_algo
pattern
locale
Please note that for all of the aforementioned arguments, a from_column()
call needs to reference a column that has data of the correct type (this is
different for each argument). Additional columns for parameter values can be
generated with cols_add()
(if not already present). Columns that contain
parameter data can also be hidden from final display with cols_hide()
.
Finally, there is no limitation to how many arguments the from_column()
helper is applied so long as the arguments belong to this closed set.
Examples
Using a summarized version of the towny
dataset, let's create a gt
table. Here, fmt_index()
is used to transform incremental
integer values into capitalized letters (in the ranking
column). With
cols_merge()
that formatted column of "A"
to "E"
values is merged with
the census_div
column to create an indexed listing of census subdivisions,
here ordered by increasing total municipal population.
towny |>
dplyr::select(name, csd_type, census_div, population_2021) |>
dplyr::group_by(census_div) |>
dplyr::summarize(
population = sum(population_2021),
.groups = "drop_last"
) |>
dplyr::slice_min(population, n = 5) |>
dplyr::mutate(ranking = dplyr::row_number(), .before = 0) |>
gt() |>
fmt_integer() |>
fmt_index(columns = ranking, pattern = "{x}.") |>
cols_merge(columns = c(ranking, census_div)) |>
cols_align(align = "left", columns = ranking) |>
cols_label(
ranking = md("Census \nSubdivision"),
population = md("Population \nin 2021")
) |>
tab_header(title = md("The smallest \ncensus subdivisions")) |>
tab_options(table.width = px(325))
See also
The vector-formatting version of this function: vec_fmt_index()
.
Other data formatting functions:
data_color()
,
fmt()
,
fmt_auto()
,
fmt_bins()
,
fmt_bytes()
,
fmt_chem()
,
fmt_country()
,
fmt_currency()
,
fmt_date()
,
fmt_datetime()
,
fmt_duration()
,
fmt_email()
,
fmt_engineering()
,
fmt_flag()
,
fmt_fraction()
,
fmt_icon()
,
fmt_image()
,
fmt_integer()
,
fmt_markdown()
,
fmt_number()
,
fmt_partsper()
,
fmt_passthrough()
,
fmt_percent()
,
fmt_roman()
,
fmt_scientific()
,
fmt_spelled_num()
,
fmt_tf()
,
fmt_time()
,
fmt_units()
,
fmt_url()
,
sub_large_vals()
,
sub_missing()
,
sub_small_vals()
,
sub_values()
,
sub_zero()