Jak zmienić kształt ramki danych za pomocą kolumn „powtarzających się”?

Jestem nowy w analizie danych z R. Niedawno dostałem wstępnie sformatowany zestaw danych modelu obserwacji środowiska, którego przykładowy podzbiór jest pokazany poniżej:

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

Zasadniczo dane obejmują szeregi czasowe obserwowanych godzinowo i modelowanych stężeń substancji zanieczyszczających w różnych miejscach w „powtarzających się kolumnach”, tj. Site-obs-mod (w przykładzie pokazałem tylko 2 z wszystkich 75 miejsc). Przeczytałem ten „szeroki” zbiór danych jako ramkę danych i chciałem przekształcić go w „węższy” format jako:

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

Wierzyłem, że powinienem użyć pakietu „reshape2”, aby to zrobić. Najpierw próbowałem stopić, a następnie wyrzucić zestaw danych:

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

Jednak zwróciło tylko połowę danych, tzn. Zapisy witryny („centrum miasta”) następujące po pierwszym („kampus”) zostały odcięte:

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

Potem spróbowałem przekształcić:

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

Zwrócił jednak komunikat o błędzie:

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

Próbowałem szukać poprzednich pytań, ale nie znalazłem podobnych scenariuszy (popraw mnie, jeśli się mylę). Czy ktoś mógłby mi w tym pomóc?

Z góry bardzo dziękuję!

questionAnswers(2)

yourAnswerToTheQuestion