The sub_values() function

Let’s create an input table with three columns. This contains an assortment of values that could potentially undergo some substitution via sub_values().

tbl <-
  dplyr::tibble(
    num_1 = c(-0.01, 74, NA, 0, 500, 0.001, 84.3),
    int_1 = c(1L, -100000L, 800L, 5L, NA, 1L, -32L),
    lett = LETTERS[1:7]
  )

tbl
# A tibble: 7 × 3
    num_1   int_1 lett 
    <dbl>   <int> <chr>
1  -0.01        1 A    
2  74     -100000 B    
3  NA         800 C    
4   0           5 D    
5 500          NA E    
6   0.001       1 F    
7  84.3       -32 G    

Values in the table body cells can be replaced by specifying which values should be replaced (in values) and what the replacement value should be. It’s okay to search for numerical or character values across all columns and the replacement value can also be of the numeric or character types.

tbl |>
  gt() |>
  sub_values(values = c(74, 500), replacement = 150) |>
  sub_values(values = "B", replacement = "Bee") |>
  sub_values(values = 800, replacement = "Eight hundred")
num_1 int_1 lett
-0.010 1 A
150 -100000 Bee
NA Eight hundred C
0.000 5 D
150 NA E
0.001 1 F
84.300 -32 G

We can also use the pattern argument to target cell values for replacement in character-based columns.

tbl |>
  gt() |>
  sub_values(pattern = "A|C|E", replacement = "Ace")
num_1 int_1 lett
-0.010 1 Ace
74.000 -100000 B
NA 800 Ace
0.000 5 D
500.000 NA Ace
0.001 1 F
84.300 -32 G

For the most flexibility, it’s best to use the fn argument. With that you need to ensure that the function you provide will return a logical vector when invoked on a column of cell values, taken as x (and, the length of that vector must match the length of x).

tbl |>
  gt() |>
  sub_values(
    fn = function(x) x >= 0 & x < 50,
    replacement = "Between 0 and 50"
  )
num_1 int_1 lett
-0.01 Between 0 and 50 A
74.00 -100000 B
NA 800 C
Between 0 and 50 Between 0 and 50 D
500.00 NA E
Between 0 and 50 Between 0 and 50 F
84.30 -32 G