if you use group_by(row_number) runif will run for each row individually:
require(dplyr)
a <- mtcars %>%
group_by(row_number()) %>%
mutate(rand_num = case_when(cyl == 4 ~ runif(1,24,36),
cyl == 6 ~ runif(1,48,56),
cyl == 8 ~ runif(1,330,366),
TRUE ~ 1))