我使用聚合来创建一个接近我需要的数据框。但是,我遇到的问题正是我想要的。
假设原始数据如下:
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 ║
╚═══════╩══════╩═══════╩══════════╝
答案 0 :(得分: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
这假设您不会在两个不同的项目之间进行最大价格分割。