Your tall data is actually also wide.
So you have to first melt the semi tall (or wide) to a full tall table using melt and then use dcast to make it as wide as you want.
If your dataframe is not in a datatable format convert it first to data.table:
library(data.table)
setDT(dt1) # where dt1 is your original dataframe.
The data.table can now be quickly transformed to the output you need:
dt2 <- melt(dt1,id.var="date")
dcast(dt2,date ~ variable)