Secondary axes in ggplot have to be a transformation of the primary axis. Since your primary y axis runs from 0 to 100, I had the secondary axis cover one tenth of that. The following code results in a plot that needs to be cleaned up, but I will leave that to you.
library(tidyr)
library(ggplot2)
library(dplyr)
#plot with CI
r_data_2 <- data.frame(time = c("January", "February", "March", "April", "May", "June"),
Cake = c(12,26,39,37,40,28),
NoCake = c(1,2,3,1,5,4))
MEDIAN <- data.frame(time = c("January", "February", "March", "April", "May", "June"),
Median = c(5.5,4,6,8,5,8),
IQR = c(2,3,4,1,5,4))
MEDIAN <- MEDIAN %>% mutate(time = factor(time, levels = c("January", "February",
"March", "April", "May", "June")),
IQRhigh = Median + IQR/2,
IQRlow = Median - IQR/2)
r_datatall_2 <- r_data_2 %>% gather(key=test, value, Cake:NoCake)
r_datatall_2
r_datatall_2$n <- c(13,28,42,38,45,32,13,28,42,38,45,32)
#percent
r_datatall_2$prop <- r_datatall_2$value/r_datatall_2$n*100
#calculateCI intervals
r_datatall_2$ci_low <- ((r_datatall_2$value/r_datatall_2$n)-1.96*sqrt(((r_datatall_2$value/r_datatall_2$n)*(1-(r_datatall_2$value/r_datatall_2$n)))/r_datatall_2$n))*100
r_datatall_2$ci_hi <- ((r_datatall_2$value/r_datatall_2$n)+1.96*sqrt(((r_datatall_2$value/r_datatall_2$n)*(1-(r_datatall_2$value/r_datatall_2$n)))/r_datatall_2$n))*100
r_datatall_2$ci <- r_datatall_2$prop-r_datatall_2$ci_low
#MEDIAN <- r_datatall_2 %>% group_by(test) %>% summarize(MED = median(prop))
r_datatall_2$time <- factor(r_datatall_2$time, levels = c("January", "February",
"March", "April", "May", "June"))
#plot bars with CI-intervals
ggplot(r_datatall_2, aes(time)) +
geom_bar(aes(y = prop, fill = test), position ='dodge', stat='identity') +
geom_text(aes(y = prop, label=value), position=position_dodge(width=0.9), vjust=-5.5) +
geom_line(aes(x = time, y = Median * 10, group = 1), data = MEDIAN) +
geom_errorbar(aes(x = time, ymin = IQRlow * 10, ymax = IQRhigh * 10), data = MEDIAN, width = 0.3) +
labs(y="Percent (%)", x="", fill="", legend=c("A","B")) +
# ylim(0,120)+
scale_fill_brewer(palette="Paired", labels = c("Cake","No Cake"))+
scale_y_continuous(sec.axis = sec_axis(~ . / 10, name = "Median"))
ggtitle("Cake according to month") #+
#geom_errorbar(aes(ymin=ci_low, ymax=ci_hi, x=time), position=position_dodge(0.9), width = 0.3)