I think you should use the forestplot package. First, you need to pivot it wide, and then plot it like the following:
library(forestplot)
library(tidyr)
library(dplyr)
results = data.frame(Group=rep(c("A","B"),each=3),
Subgroup = rep(1:3,2),est = runif(6,min=-2,max=2))
results$lCI = results$est - 0.1
results$hCI = results$est + 0.1
df_wide = pivot_wider(results,id_cols=Group,names_from=Subgroup,values_from=c("est","lCI","hCI"))
forestplot(list(Var=df_wide[["Group"]]),
legend = 1:3,
fn.ci_norm = c(fpDrawNormalCI, fpDrawCircleCI),
mean = select(df_wide,contains("est")),
lower = select(df_wide,contains("lCI")),
upper = select(df_wide,contains("hCI")),
col=fpColors(box=c("blue", "darkred"))
)