Все още се опитвам да създам подробна рамка от данни за времеви серии. Опитвам се да получа месечни данни за множество точки от данни, след което да ги групирам по множество фактори. Не съм сигурен, че това е възможно, тъй като не съм виждал подобен пример в документацията, винетките или на SO.
Ето примерните данни, които се опитвам да структурирам:
clients <- 1:100
dates <- seq(as.Date("2012/1/1"), as.Date("2012/9/1"), "days")
categories <- LETTERS[1:5]
products <- data.frame(clientID = sample(clients, 10000, replace = TRUE),
OrderDate = sample(dates, 10000, replace = TRUE),
category = sample(categories, 10000, replace = TRUE),
numProducts = sample(1:10, 1000, replace = TRUE),
OrderTotal = sample(1:100, 1000, replace = TRUE))
Резултатът изглежда така:
head(products)
clientID OrderDate category numProducts OrderTotal
1 90 2012-03-20 D 9 18
2 66 2012-08-19 A 3 50
3 45 2012-05-25 A 10 75
4 28 2012-01-01 D 4 27
5 71 2012-02-28 A 4 76
6 26 2012-01-28 C 8 89
Структурата, до която се опитвам да стигна, ще изглежда така:
Category A ... Category E
ClientID Jan2012numProducts Jan2012OrderTotal Feb2012numProducts Feb2012OrderTotal ... Sep2012numProducts Sep2012OrderTotal
1 12 78 6 52 0 0
2 7 218 3 15 1 28
...
99999 20 192 10 100 28 156
Осъзнавам, че имената на колоните вероятно ще станат дълги и ще изглеждат нещо като AJan2012numProducts или AJan2012OrderTotal и това е добре.
Ето процедурите, които не са ми ясни - отново не мога да ги намеря споменати в документацията или винетките:
1) Може ли zoo
да обобщава за множество полета за наблюдение? В този случай искам да получа сумата от numProducts и OrderTotal едновременно за месеца. Дори ако zoo
не може, мога да използвам функцията merge
и да се присъединя към clientID и категория
2) Може ли zoo
да групира по фактор (или множество фактори), за да извърши агрегирането? Искам да мога да разглеждам clientID и категория по месеци.
3) Има ли възможност да се направи рамката с данни с категория и месец по оста X. Ако не, ако можех да накарам данните от времевите серии просто да се групират заедно по clientID и категория, тогава бих могъл да използвам reshape
, за да направя времевите серии широки с помощта на cast
. Ще трябва да вкарам рамката с данни в тази структура:
head(df)
clientID Month category numProducts OrderTotal
1 2012-01-31 A 12 78
1 2012-01-31 B 0 0
....
99999 2012-09-30 D 6 71
99999 2012-09-30 E 1 28
cast(df, month~category, sum) (or something close to that)
Възможно ли е нещо от това? Бихте ли помогнали с някои примери?