R guardando la salida de la tabla () en un marco de datos

Tengo el siguiente marco de datos:

id<-c(1,2,3,4,1,1,2,3,4,4,2,2)
period<-c("first","calib","valid","valid","calib","first","valid","valid","calib","first","calib","valid")
df<-data.frame(id,period)

mecanografía

table(df) 

resultados en

period
id  calib first valid
1     1     2     0
2     2     0     2
3     0     0     2
4     1     1     1

sin embargo si lo guardo como un cuadro de datos 'df'

 df<-data.frame(table(df))

El formato de 'df' sería como

id period Freq
1   1  calib    2
2   2  calib    1
3   3  calib    1
4   4  calib    0
5   1  first    1
6   2  first    2
7   3  first    0
8   4  first    0
9   1  valid    0
10  2  valid    0
11  3  valid    2
12  4  valid    3

¿Cómo puedo evitar esto y cómo puedo guardar la primera salida como está en un marco de datos?

más importante aún, ¿hay alguna manera de obtener el mismo resultado usando 'dcast'?

Respuestas a la pregunta(2)

Su respuesta a la pregunta