【问题标题】:Create data frame with factor variable levels based on maximum of numeric variable根据数值变量的最大值创建具有因子变量水平的数据框
【发布时间】:2013-05-31 18:02:17
【问题描述】:

我使用聚合来创建一个接近我需要的数据框。但是,我在获得我想要的东西时遇到了问题。

假设原始数据如下:

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 ║
╚═══════╩══════╩═══════╩══════════╝

【问题讨论】:

  • 仅供参考 - 示例数据的所有疯狂格式使得任何人几乎不可能真正使用,这有点违背了目的。比我的编辑更好的是提供dput(data) 的输出。
  • 抱歉,我不确定如何为 stackexchange 设置表格格式,并引用了这个 meta.stackexchange.com/questions/73566/… 导致我找到了这个 sensefulsolutions.com/2010/10/format-text-as-table.html
  • 别担心。只是当您为 R 问题提供示例数据时,最重要的是以一种便于人们转移到他们自己的 R 会话的方式进行。

标签: r dataframe


【解决方案1】:

这是一个使用 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

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

【讨论】:

  • 非常感谢。它可以满足我的要求。对于在两个不同项目之间划分最高价格的情况,它会选择按字母顺序排列的第一个项目,这足以满足我的需求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
  • 2022-11-21
相关资源
最近更新 更多