2

私は一貫してトランザクション データを取得し、それを日、週、月、四半期、年ごとに集計する必要があります。基本的に、それは時系列データです。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))

plyrandでこれを行うこともできますが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 軸に増分的に追加できることを望んでいました。

これまたはより適切なパッケージを集約するためのより良いアプローチはありますか?

4

1 に答える 1

4

products$numProductsは動物園オブジェクトではなく、ベクトルです。メソッドディスパッチを使用して を呼び出す前に、zoo オブジェクトを作成する必要がありますaggregate.zoo

pz <- with(products, zoo(numProducts, OrderDate))
products.TS <- aggregate(pz, as.yearmon, mean)
于 2012-09-03T21:56:00.540 に答える