Agregue una línea vertical con una intersección diferente para cada panel en ggplot2

Estoy usando ggplot2 para crear paneles de histogramas, y me gustaría poder agregar una línea vertical a la media de cada grupo. Pero geom_vline () usa la misma intersección para cada panel (es decir, la media global):

require("ggplot2")
# setup some sample data
N <- 1000
cat1 <- sample(c("a","b","c"), N, replace=T)
cat2 <- sample(c("x","y","z"), N, replace=T)
val <- rnorm(N) + as.numeric(factor(cat1)) + as.numeric(factor(cat2))
df <- data.frame(cat1, cat2, val)

# draws a single histogram with vline at mean
qplot(val, data=df, geom="histogram", binwidth=0.2) + 
  geom_vline(xintercept=mean(val), color="red")

# draws panel of histograms with vlines at global mean
qplot(val, data=df, geom="histogram", binwidth=0.2, facets=cat1~cat2) + 
  geom_vline(xintercept=mean(val), color="red")

¿Cómo puedo hacer que use la media del grupo de cada panel como el intercepto x? (Puntos de bonificación si también puede agregar una etiqueta de texto por la línea con el valor de la media).

Respuestas a la pregunta(2)

Su respuesta a la pregunta