With numeric values in a gt table, we can transform those to values of
bytes with human readable units. fmt_bytes() allows for the
formatting of byte sizes to either of two common representations: (1) with
decimal units (powers of 1000, examples being "kB" and "MB"), and (2)
with binary units (powers of 1024, examples being "KiB" and "MiB").
It is assumed the input numeric values represent the number of bytes and automatic truncation of values will occur. The numeric values will be scaled to be in the range of 1 to <1000 and then decorated with the correct unit symbol according to the standard chosen. For more control over the formatting of byte sizes, we can use the following options:
- decimals: choice of the number of decimal places, option to drop trailing zeros, and a choice of the decimal symbol 
- digit grouping separators: options to enable/disable digit separators and provide a choice of separator symbol 
- pattern: option to use a text pattern for decoration of the formatted values 
- locale-based formatting: providing a locale ID will result in number formatting specific to the chosen locale 
Usage
fmt_bytes(
  data,
  columns = everything(),
  rows = everything(),
  standard = c("decimal", "binary"),
  decimals = 1,
  n_sigfig = NULL,
  drop_trailing_zeros = TRUE,
  drop_trailing_dec_mark = TRUE,
  use_seps = TRUE,
  min_sep_threshold = 1,
  pattern = "{x}",
  sep_mark = ",",
  dec_mark = ".",
  force_sign = FALSE,
  incl_space = TRUE,
  locale = NULL
)Arguments
- data
- The gt table data object - obj:<gt_tbl>// required- This 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()and- everything()).
- rows
- Rows to target - <row-targeting expression>// default:- everything()- In conjunction with - columns, we can specify which of their rows should undergo formatting. The default- everything()results in all rows in- columnsbeing formatted. Alternatively, we can supply a vector of row captions within- c(), a vector of row indices, or a select helper function (e.g.- starts_with(),- ends_with(),- contains(),- matches(),- num_range(), and- everything()). We can also use expressions to filter down to the rows we need (e.g.,- [colname_1] > 100 & [colname_2] < 50).
- standard
- Standard used to express byte sizes - singl-kw:[decimal|binary]// default:- "decimal"- The form of expressing large byte sizes is divided between: (1) decimal units (powers of 1000; e.g., - "kB"and- "MB"), and (2) binary units (powers of 1024; e.g.,- "KiB"and- "MiB").
- decimals
- Number of decimal places - scalar<numeric|integer>(val>=0)// default:- 1- This corresponds to the exact number of decimal places to use. A value such as - 2.34can, for example, be formatted with- 0decimal places and it would result in- "2". With- 4decimal places, the formatted value becomes- "2.3400". The trailing zeros can be removed with- drop_trailing_zeros = TRUE.
- n_sigfig
- Number of significant figures - scalar<numeric|integer>(val>=1)// default:- NULL(- optional)- A option to format numbers to n significant figures. By default, this is - NULLand thus number values will be formatted according to the number of decimal places set via- decimals. If opting to format according to the rules of significant figures,- n_sigfigmust be a number greater than or equal to- 1. Any values passed to the- decimalsand- drop_trailing_zerosarguments will be ignored.
- drop_trailing_zeros
- Drop any trailing zeros - scalar<logical>// default:- FALSE- A logical value that allows for removal of trailing zeros (those redundant zeros after the decimal mark). 
- drop_trailing_dec_mark
- Drop the trailing decimal mark - scalar<logical>// default:- TRUE- A logical value that determines whether decimal marks should always appear even if there are no decimal digits to display after formatting (e.g., - 23becomes- 23.if- FALSE). By default trailing decimal marks are not shown.
- use_seps
- Use digit group separators - scalar<logical>// default:- TRUE- An option to use digit group separators. The type of digit group separator is set by - sep_markand overridden if a locale ID is provided to- locale. This setting is- TRUEby default.
- min_sep_threshold
- Minimum digit threshold for grouping separators - scalar<numeric|integer>(val>=1)// default:- 1- The minimum number of digits required in the integer part of a number for grouping separators to be applied. This parameter determines when digit grouping begins based on the magnitude of values. The value - 1(the default) applies separators starting at 4-digit numbers (e.g.,- 1,000and above). A value of- 2starts grouping at 5-digit numbers (- 10,000and above), while- 3begins at 6-digit numbers (- 100,000and above).
- 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.
- sep_mark
- Separator mark for digit grouping - scalar<character>// default:- ","- The string to use as a separator between groups of digits. For example, using - sep_mark = ","with a value of- 1000would result in a formatted value of- "1,000". This argument is ignored if a- localeis supplied (i.e., is not- NULL).
- dec_mark
- Decimal mark - scalar<character>// default:- "."- The string to be used as the decimal mark. For example, using - dec_mark = ","with the value- 0.152would result in a formatted value of- "0,152"). This argument is ignored if a- localeis supplied (i.e., is not- NULL).
- force_sign
- Forcing the display of a positive sign - scalar<logical>// default:- FALSE- Should the positive sign be shown for positive numbers (effectively showing a sign for all numbers except zero)? If so, use - TRUEfor this option. The default is- FALSE, where only negative numbers will display a minus sign.
- incl_space
- Include a space between the value and the units - scalar<logical>// default:- TRUE- An option for whether to include a space between the value and the units. The default is to use a space character for separation. 
- 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 call- info_locales()for a useful reference for all of the locales that are supported. A locale ID can be also set in the initial- gt()function call (where it would be used automatically by any function with a- localeargument) but a- localevalue provided here will override that global locale.
Compatibility of formatting function with data values
fmt_bytes() 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_bytes() 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():
- standard
- decimals
- n_sigfig
- drop_trailing_zeros
- drop_trailing_dec_mark
- use_seps
- pattern
- sep_mark
- dec_mark
- force_sign
- incl_space
- locale
Please note that for each 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.
Adapting output to a specific locale
This formatting function can adapt outputs according to a provided locale
value. Examples include "en" for English (United States) and "fr" for
French (France). The use of a valid locale ID here means separator and
decimal marks will be correct for the given locale. Should any values be
provided in sep_mark or dec_mark, they will be overridden by the locale's
preferred values.
Note that a locale value provided here will override any global locale
setting performed in gt()'s own locale argument (it is settable there as
a value received by all other functions that have a locale argument). As a
useful reference on which locales are supported, we can call info_locales()
to view an info table.
Examples
Use a single column from the exibble dataset and create a simple gt
table. We'll use fmt_bytes() to format the num column to display as byte
sizes in the decimal standard.

Let's create an analogous table again by using fmt_bytes(),
this time showing byte sizes as binary values by using standard = "binary".

See also
The vector-formatting version of this function: vec_fmt_bytes().
Other data formatting functions:
data_color(),
fmt(),
fmt_auto(),
fmt_bins(),
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_index(),
fmt_integer(),
fmt_markdown(),
fmt_number(),
fmt_number_si(),
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()