your code looks fine to me, it works...
if you specifically want to use prop.table/proportions, then it doesnt really involve dplyr, it relies on using xtabs
(data <- tibble(
zone = c(1, 1, 2, 2, 3, 3),
cases = c(100L, 500L, 200L, 600L, 400L, 1000L),
responses = as.factor(c("yes", "no", "yes", "no", "yes", "no"))
))
(myxt <- xtabs(cases ~ zone + responses, data))
(myprops <- proportions(myxt,"zone"))
(myprops_tbl <- as_tibble(myprops))
I didn't understand your issue with integers.
in my data i have the cases as integers, and your code works fine and gives decimal precision,...
data %>%
group_by(zone) %>%
mutate(percentage=cases/sum(cases))