2012-09-03 44 views
2

我一直需要採取交易數據,並按天,周,月,季度,年 - 它集合了時間序列數據。我開始將zoo/xts應用於我的數據,希望能夠更快地彙總數據,但是我不完全瞭解包的目的,或者我試圖錯誤地應用它。R動物園 - 聚合許多記錄與相同的時間條目

一般來說,我想計算按時間段(日,周,月等)按類別排序的訂單數量和產品數量。

#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軸。

有沒有更好的方法來聚合這個或更合適的包?

+0

你是什麼意思「月或季度增加到X軸的數據幀」? –

+0

我在想像一個OLAP多維數據集 - 該類別將在Y軸上,然後是1月,2月,3月...... 2012年9月。您給出的答案會讓我知道,或到宿舍。我只需要弄清楚如何按類別或ClientID進行分組。謝謝。 – mikebmassey

回答

4

products$numProducts是一個向量,而不是動物園對象。您需要先創建一個動物園對象,然後才能使用方法調度來調用aggregate.zoo

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