Jeżeli dane są dat
(a poziom ustawiony okresie kolejności), a następnie inny roztwór zasady R jest użycie (bardzo unintuitive) reshape()
funkcję:
reshape(dat, v.names = "Demand", idvar = "Store", timevar = "Month",
direction = "wide")
który po fragmencie danych otrzymujemy :
> reshape(dat, v.names = "Demand", idvar = "Store", timevar = "Month",
+ direction = "wide")
Store Demand.Jan Demand.Feb Demand.Mar
1 A 100 150 120
4 B 200 230 320
nazwy można łatwo czyścić, jeśli chcesz:
> out <- reshape(dat, v.names = "Demand", idvar = "Store", timevar = "Month",
+ direction = "wide")
> names(out)[-1] <- month.abb[1:3]
> out
Store Jan Feb Mar
1 A 100 150 120
4 B 200 230 320
(Aby uzyskać wyjście powyżej, czytam dane w sposób podobny do pokazanego na @ Dwin za odpowiedzi, a następnie prowadził następujące:
dat <- transform(dat, Month = factor(Month, levels = month.abb[1:3]))
gdzie dat
było to, co nazywa się dane)
Coś nie zgadza się z wydrukowanymi odpowiedziami. Jan A powinien mieć na przykład 100, a nie 150. Twój kod działa, więc podejrzewam, że skopiowałeś dane wyjściowe przed zmianą poziomów. –
Masz rację co do błędu, ale dlatego, że niewłaściwie zmieniłem poziomy. Patrz wyżej. –