Calcula la media por grupo

Tengo un gran marco de datos que se parece a esto:

df <- data.frame(dive=factor(sample(c("dive1","dive2"),10,replace=TRUE)),speed=runif(10))
> df
    dive      speed
1  dive1 0.80668490
2  dive1 0.53349584
3  dive2 0.07571784
4  dive2 0.39518628
5  dive1 0.84557955
6  dive1 0.69121443
7  dive1 0.38124950
8  dive2 0.22536126
9  dive1 0.04704750
10 dive2 0.93561651

Mi objetivo es promediar los valores de una columna cuando otra columna es igual a un cierto valor y repetir esto para todos los valores. es decir, en el ejemplo anterior me gustaría devolver un promedio para la columnaspeed por cada valor único de la columnadive. Así que cuandodive==dive1, el promedio paraspeed es esto y así sucesivamente para cada valor dedive.

Respuestas a la pregunta(3)

Su respuesta a la pregunta