我仍在尝试创建详细的时间序列数据框。我正在尝试获取多个数据点的月度数据,然后按多个因素分组。我不确定这是可能的,因为我没有在文档、小插图或 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)
这有可能吗?你能帮忙举一些例子吗?