What about just prop = 1/3 with slice_sample?
prop = 1/3
slice_sample
> df %>% + slice_sample(prop = 1 / 3, by = Story) Story 1 C 2 C 3 X 4 X 5 X 6 A 7 A 8 A 9 A 10 A 11 B 12 B 13 B 14 B