Если данные находятся в dat
(и уровни установлены в календарном порядке), то другое базовое решение R - использовать (невероятно не интуитивно понятную) функцию reshape()
:
reshape(dat, v.names = "Demand", idvar = "Store", timevar = "Month",
direction = "wide")
, который для фрагмента данных дает:
> 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
Имена можно легко очистить, если вы хотите:
> 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
(Чтобы получить вывод выше, я прочитал данные аналогично тому, как показано в ответе @ DWin, а затем выполнил следующее:
dat <- transform(dat, Month = factor(Month, levels = month.abb[1:3]))
где dat
было то, что я назвал данными)