Agregue por várias colunas e reformule de longo para amplo

Existem algumas perguntas semelhantes a este tópico no SO, mas não exatamente como o meu caso de usuário. Eu tenho um conjunto de dados em que as colunas são dispostas como mostrado abaixo

     Id        Description          Value
     10        Cat                  19
     10        Cat                  20
     10        Cat                  5
     10        Cat                  13
     11        Cat                  17
     11        Cat                  23
     11        Cat                  7
     11        Cat                  14  
     10        Dog                  19
     10        Dog                  20
     10        Dog                  5
     10        Dog                  13
     11        Dog                  17
     11        Dog                  23
     11        Dog                  7
     11        Dog                  14    

O que estou tentando fazer é capturar a média da coluna Valor por ID, Descrição. O conjunto de dados final ficaria assim.

     Id       Cat         Dog 
     10       14.25       28.5
     11       15.25       15.25

Eu posso fazer isso de uma maneira muito grosseira, não muito eficiente como esta

tempdf1 <- df %>%
  filter(str_detect(Description, "Cat")) %>%
   group_by(Id, Description) %>%
  summarize(Mean_Value = mean(Value) , na.rm = TRUE))

Isso não é muito conveniente. Qualquer conselho sobre como obter os resultados esperados com mais eficiência é muito apreciado.

questionAnswers(4)

yourAnswerToTheQuestion