¿Cómo remodelar un marco de datos con columnas "recurrentes"?

Soy nuevo en el análisis de datos con R. Hace poco recibí un conjunto de datos de modelo de observación ambiental preformateado, un subconjunto de ejemplo que se muestra a continuación:

date                   site      obs    mod      site           obs    mod
2000-09-01 00:00:00    campus    NA     61.63    city centre    66     56.69
2000-09-01 01:00:00    campus    52     62.55    city centre    NA     54.75
2000-09-01 02:00:00    campus    52     63.52    city centre    56     54.65

Básicamente, los datos incluyen las series de tiempo de concentraciones observadas y modeladas por hora de un contaminante en varios sitios en "columnas recurrentes", es decir, sitio - obs - mod (en el ejemplo, solo mostré 2 de un total de 75 sitios). Leí este conjunto de datos "ancho" como un marco de datos y quise remodelarlo en el formato "más estrecho" como:

date                   site           obs    mod
2000-09-01 00:00:00    campus         NA     61.63
2000-09-01 01:00:00    campus         52     62.55
2000-09-01 02:00:00    campus         52     63.52
2000-09-01 00:00:00    city centre    66     56.69
2000-09-01 01:00:00    city centre    NA     54.75
2000-09-01 02:00:00    city centre    56     54.65

Creí que debería usar el paquete "reshape2" para hacer esto. Primero intenté fundir y luego difundir el conjunto de datos:

test.melt <- melt(test.data, id.vars = "date", measure.vars = c("site", "obs", "mod"))

Sin embargo, solo se devolvió la mitad de los datos, es decir, los registros del sitio (s) ("centro de la ciudad") después del primero ("campus") se cortaron:

date                   variable    value
2001-01-01 00:00:00    site        campus
2001-01-01 01:00:00    site        campus
2001-01-01 02:00:00    site        campus
2001-01-01 00:00:00    obs         NA
2001-01-01 01:00:00    obs         52
2001-01-01 02:00:00    obs         52
2001-01-01 00:00:00    mod         61.63
2001-01-01 01:00:00    mod         62.55
2001-01-01 02:00:00    mod         63.52

Entonces traté de refundir:

test.recast <- recast(test.data, date ~ site + obs + mod)

Sin embargo, volvió con mensaje de error:

Error in eval(expr, envir, enclos) : object 'site' not found

He intentado buscar preguntas anteriores pero no he encontrado escenarios similares (corríjame si me equivoco). ¿Podría alguien ayudarme con esto, por favor?

¡Muchas gracias de antemano!

Respuestas a la pregunta(2)

Su respuesta a la pregunta