library(tidyverses)
(df1 <-tibble(
col_1 = c("r","g","r"),
col_2 = c("b","r","g"),
col_3 = c("b","b","r")
))
# get all character unique values
(unq <- unique(unlist(df1 %>% select_if(is.character))))
(df2 <- mutate(df1,
across(where(is.character),
~factor(.x,levels=unq))))
(df3 <- mutate(df2,
across(where(is.factor),
as.integer)))