R Zoo - 聚合具有相同时间条目的许多记录

标签 r zoo

我一直需要获取交易数据并按日、周、月、季度、年进行汇总 - 本质上,它是时间序列数据。我开始将 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))

我可以使用 plyrreshape 来做到这一点,但我认为这是一种迂回的方式。

#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 轴的数据框中。

是否有更好的方法来聚合这个或更合适的包?

最佳答案

products$numProducts 是一个向量,而不是一个 Zoo 对象。您需要先创建一个 Zoo 对象,然后才能使用方法分派(dispatch)调用 aggregate.zoo

pz <- with(products, zoo(numProducts, OrderDate))
products.TS <- aggregate(pz, as.yearmon, mean)

关于R Zoo - 聚合具有相同时间条目的许多记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12254182/

相关文章:

R 删除只有 NA 的组

r - 用于绘制时间序列数据的 x 轴刻度的日期格式

r - 无法安装 "zoo"包(R 版本 2.15.1)

r - 使用 Knit 未返回值

r - 将 Excel 数字转换为日期

r - 如何显示 R 中两个数据集不共享哪些变量?

r - 如何使用 R 中的循环分别为每个因子级别生成 z 分数?

r - 为 xts 分配新列

R min 和 max 函数不适用于日期

r - 为 curl 请求构建等效的 R 请求