1

集計を使用して、必要なものに近いデータ フレームを作成しました。ただし、必要なものを正確に取得するのに問題があります。

生データが次のようになっているとします。

data


 Order Item Price Quantity
     1    A    10        1 
     1    A    20        3 
     2    B    30        1 
     2    C    40        1 
     3    B    30        1 
     4    C    50        1 
     5    A    10        1 
     5    B    40        2 

商品と注文に基づいて価格と数量を合計します。

data.new <- aggregate(cbind(price, quantity) ~ Order + Item, sum, data = data)
data.new

╔═══════╦══════╦═══════╦══════════╗
║ Order ║ Item ║ Price ║ Quantity ║
╠═══════╬══════╬═══════╬══════════╣
║     1 ║ A    ║    30 ║        4 ║
║     2 ║ B    ║    30 ║        1 ║
║     2 ║ C    ║    40 ║        1 ║
║     3 ║ B    ║    30 ║        1 ║
║     4 ║ C    ║    50 ║        1 ║
║     5 ║ A    ║    10 ║        1 ║
║     5 ║ B    ║    40 ║        2 ║
╚═══════╩══════╩═══════╩══════════╝

これは Order = 1 の場合にうまく機能しますが、各行を一意の Order にする必要があります。そのため、一意の Order ごとに最大 Price で Itemを要約したいと思います。アイテムは、一意の注文の販売価格の大部分を動かしたものを示すための高レベルの要素です。次のようになります。

data.new <- ????
data.new

╔═══════╦══════╦═══════╦══════════╗
║ Order ║ Item ║ Price ║ Quantity ║
╠═══════╬══════╬═══════╬══════════╣
║     1 ║ A    ║    30 ║        4 ║
║     2 ║ C    ║    70 ║        2 ║
║     3 ║ B    ║    30 ║        1 ║
║     4 ║ C    ║    50 ║        1 ║
║     5 ║ B    ║    50 ║        3 ║
╚═══════╩══════╩═══════╩══════════╝
4

1 に答える 1

2

plyrを使用した 1 つのオプション (非常に多くのオプションの中で) を次に示します。

ddply(data,.(Order),
      summarise,
      Item = unique(Item[which.max(Price)]),
      Price = sum(Price),
      Quantity = sum(Quantity))

  Order Item Price Quantity
1     1    A    30        4
2     2    C    70        2
3     3    B    30        1
4     4    C    50        1
5     5    B    50        3

これは、2 つの異なるアイテム間で最大価格が分割されないことを前提としています。

于 2013-05-31T18:17:04.617 に答える