【问题标题】:R Zoo - aggregating many records with same time entryR Zoo - 聚合许多具有相同时间条目的记录
【发布时间】:2012-09-03 21:26:06
【问题描述】:

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

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

【问题讨论】:

  • 您所说的“月份或季度逐渐添加到 X 轴的数据框中”是什么意思?
  • 我在想一个 OLAP 多维数据集 - 类别将在 Y 轴上,然后是 2012 年 1 月、2 月、3 月... .我现在只需要弄清楚如何按类别或 ClientID 分组。谢谢。

标签: r zoo


【解决方案1】:

products$numProducts 是一个向量,而不是一个动物园对象。您需要先创建一个 zoo 对象,然后才能使用方法调度调用 aggregate.zoo

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    相关资源
    最近更新 更多