Mam ramkę danych, którą chciałbym scalić z długiego do szerokiego formatu, ale chciałbym, aby czas był osadzony w nazwie zmiennej w szerokim format. Oto przykład zbiór danych z długim formacie:Zmiana kształtu danych z długich na szerokie, z czasem w nowej nazwie zmiennej szerokiej
id <- as.numeric(rep(1,16))
time <- rep(c(5,10,15,20), 4)
varname <- c(rep("var1",4), rep("var2", 4), rep("var3", 4), rep("var4", 4))
value <- rnorm(16)
tmpdata <- as.data.frame(cbind(id, time, varname, value))
> tmpdata
id time varname value
1 5 var1 0.713888426169224
1 10 var1 1.71483653545922
1 15 var1 -1.51992072577836
1 20 var1 0.556992407683219
....
4 20 var4 1.03752019932467
chciałbym to w szerokim formacie z następującym wyjścia:
id var1.5 var1.10 var1.15 var1.20 ....
1 0.71 1.71 -1.51 0.55
(and so on)
Próbowałem przy użyciu funkcji zmienią się zasady R bez powodzenia , i nie byłem pewien, jak to osiągnąć, korzystając z pakietu przekształcania, ponieważ wszystkie przykłady umieszczają czas jako kolejną zmienną w szerokim formacie. Jakieś pomysły?
Dziękuję Hadley, twój kod robi dokładnie to, czego szukam. Dla mojej informacji zastąpiłem ... id, więc mogę to zapamiętać na przyszłe przykłady. – sheed03
W tym kontekście "..." oznacza wszystkie inne zmienne, które nie zostały jeszcze uwzględnione w specyfikacji rzutowania. Nie musisz zastępować go rzeczywistymi nazwami zmiennych, chyba że robisz agregację. – hadley