Cómo agregar resultados de tapply a un marco de datos existente [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Cálculo de estadísticas sobre subconjuntos de datos [duplicado] 3 respuestas

Me gustaría agregartapply resultados al marco de datos original como una nueva columna.

Aquí está mi marco de datos:

 dat <- read.table(text = " category birds    wolfs     snakes
                   yes        3        9         7
                   no         3        8         4
                   no         1        2         8
                   yes        1        2         3
                   yes        1        8         3
                   no         6        1         2
                   yes        6        7         1
                   no         6        1         5
                   yes        5        9         7
                   no         3        8         7
                   no         4        2         7
                   notsure    1        2         3
                   notsure    7        6         3
                   no         6        1         1
                   notsure    6        3         9
                   no         6        1         1   ",header = TRUE)

Me gustaría agregar la media de cada categoría al marco de datos como una columna. Solía:tapply(dat$birds, dat$category, mean) para obtener la media por categoría, pero no encontré una manera de agregarla al conjunto de datos tan lejos que en una nueva columna tendré la media de la categoría relevante.

Respuestas a la pregunta(3)

Su respuesta a la pregunta