Yes there is!
library(tidyverse)
df = tibble(child_cost = rnorm(n = 10),
adult_cost = rnorm(n = 10),
con_cost = rnorm(n = 10))
Using tidyr
Use pivot_longer to stack all your columns, then pivot_wider back again later.
df %>%
pivot_longer(child_cost:con_cost) %>%
group_by(name) %>%
summarise(mean = mean(value),
min = min(value),
max = max(value)) %>%
pivot_wider(names_from = name, values_from = c(mean, min, max))
Using dplyr
In dplyr 1.0.0 the function across was implemented, which allows for this sort of multi-column manipulation. See here: dplyr 1.0.0: working across columns
df %>%
summarise(across(c(child_cost, adult_cost, con_cost),
list(min = ~min(.x),
mean = ~mean(.x),
max = ~max(.x))))