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。因此,我希望按每个唯一订单的最高价格来总结项目。项目只是一个高水平因素,可以说明是什么推动了独特订单的大部分销售价格。它应该如下所示:

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的一个选项(在许多选项中):

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

这假设您不会在两个不同的项目之间分配最大价格。

于 2013-05-31T18:17:04.617 回答