以下のようなデータフレームdfがあるのですが、

id category
1   3
2   2
3   3
4   1
5   2
6   2

これを

id category1 category2 category3
1   0         0         1
2   0         1         0
3   0         0         1
4   1         0         0
5   0         1         0
6   0         1         0

のような形にしたいと考えています。
現在はこれを

df <- tidyr::spread(df,category,category) #横展開
df.id <- df[,1] #そのままやるとid列も1になってしまうため分離
df.other <- df[,-1]
df.other[!is.na(df.other)] <- 1
df.other[is.na(df.other)] <- 0
df <- cbind(df.id,df.other)

としているのですが、もう少しスマートな方法はないでしょうか?
どなたかご教授お願い致します。