我一直需要获取交易数据并按天、周、月、季度、年进行汇总——本质上,它是时间序列数据。我开始将zoo
/xts
应用于我的数据,希望可以更快地聚合数据,但我要么不完全理解包的用途,要么试图错误地应用它。
一般来说,我想按类别、时间段(天、周、月等)计算订单数量和订购产品数量。
#Create the data
clients <- 1:10
dates <- seq(as.Date("2012/1/1"), as.Date("2012/9/1"), "days")
categories <- LETTERS[1:5]
products <- data.frame(numProducts = 1:10,
category = sample(categories, 1000, replace = TRUE),
clientID = sample(clients, 1000, replace = TRUE),
OrderDate = sample(dates, 1000, replace = TRUE))
我可以用plyr
and来做到这一点reshape
,但我认为这是一种迂回的方式。
#Aggregate by date and category
products.day <- ddply(products, .(OrderDate, category), summarize, numOrders = length(numProducts), numProducts = sum(numProducts))
#Aggregate by Month and category
products.month <- ddply(products, .(Month = months(OrderDate), Category = category), summarize, numOrders = length(numProducts), numProducts = sum(numProducts))
#Make a wide-version of the data frame
products.month.wide <- cast(products.month, Month~Category, sum)
我试图zoo
像这样应用到数据:
products.TS <- aggregate(products$numProducts, yearmon, mean)
它返回了这个错误:
Error in aggregate.data.frame(as.data.frame(x), ...) :
'by' must be a list
我已阅读zoo
小插图和文档,但我发现的每个示例仅显示每个时间条目 1 条记录/行/条目。
我是否必须预先汇总我想要时间序列的数据?我希望我可以简单地按我想要的字段进行分组,然后将月份或季度添加到数据框中以增量方式添加到 X 轴。
有没有更好的方法来聚合这个或更合适的包?