Espalhando um quadro de dados de duas colunas com tidyr

Eu tenho um quadro de dados que se parece com isso:

  a b
1 x 8
2 x 6
3 y 3
4 y 4
5 z 5
6 z 6

e quero transformá-lo neste:

  x y z
1 8 3 5
2 6 4 6

Mas chamando

library(tidyr)
df <- data.frame(
    a = c("x", "x", "y", "y", "z", "z"),
    b = c(8, 6, 3, 4, 5, 6)
)
df %>% spread(a, b)

retorna

   x  y  z
1  8 NA NA
2  6 NA NA
3 NA  3 NA
4 NA  4 NA
5 NA NA  5
6 NA NA  6

O que estou fazendo errado?

questionAnswers(4)

yourAnswerToTheQuestion