Calcular proporciones dentro de subconjuntos de un marco de datos

Estoy tratando de obtener proporciones dentro de los subconjuntos de un marco de datos. Por ejemplo, en este marco de datos inventados:

DF<-data.frame(category1=rep(c("A","B"),each=9),
    category2=rep(rep(LETTERS[24:26],each=3),2),
     animal=rep(c("dog","cat","mouse"),6),number=sample(18))

Me gustaría calcular la proporción de cada uno de los tres animales para cada unocategory1 porcategory2 combinación (por ejemplo, de todos los animales que son "A" y "X", ¿qué proporción son perros?). Conprop.table En la columna 4 del marco de datos puedo obtener la proporción que cada fila compone de la columna "número" total, pero no he encontrado una forma de hacer esto para los subconjuntos basados ​​en la categoría 1 y 2. También intenté dividir los datos porcategory1 ycategory2 usando esto:

splitDF<-split(DF,list(DF$category1,DF$category2))

Y esperaba poder entonces aplicar una función conprop.table para obtener las proporciones de cada animal dentro de cada grupo dividido, pero no puedo obtenerprop.table trabajando porque parece que no puedo especificar a qué columna de datos aplicar la función dentro de los grupos divididos. ¿Alguien tiene algún consejo? Tal vez esto sea posible conplyr ¿o algo similar? No puedo encontrar nada en los foros de ayuda sobre formas de obtener proporciones.dentro subconjuntos de datos.

Respuestas a la pregunta(2)

Su respuesta a la pregunta