首页 文章

R:使用带有函数的ddply

提问于
浏览
5

我正在尝试将“ddply”功能与“summary”功能结合使用,但我遇到了困难 .

以下是我的代码摘录:

orderSubsConsolidate = ddply(merged, .(RIC,leg),summarize,fill.Quant = sum(fill.Quant),
                 fill.Price = function(merged){sum(merged[,7]*merged[,8])/sum(merged[,7})

“合并”是包含我想要总结的信息的矩阵 . 我按“RIC”和“leg”栏目进行总结 . 我遇到的问题是将函数应用于fill.Price列 .

这是“合并”矩阵的摘录:

交易RIC腿篮 . 名称状态Order.Msg fill.Quant fill.Price
ATNATNP ATNJ.J 1 ATNATNP1a1填充100 200
ATNATNP ATNPp.J 2 ATNATNP2a1填充100 200
ATNATNP ATNJ.J 1 ATNATNP1b1 300 400

基本上,上面的代码试图通过RIC和leg聚合fill.Quant列,然后使用[(fill.Price * fill.Quant)/fill.Quant]填充相应的fill.Price列,从而产生如下矩阵:

RIC腿部填充 . 数量填充 . 价格
ATNJ.J 1 400 350
ATNPp.J 2 100 350

任何帮助将不胜感激 . 如果有什么不清楚,请告诉我 .

谢谢!

麦克风

3 回答

  • 7

    您还可以使用匿名函数:

    ddply(merged, .(RIC,leg), function(x) 
                               data.frame( fill.Quant = sum(x$fill.Quant), 
                                           fill.Price = sum(x[,7]*x[,8])/sum(x[,7])))
    
  • 2

    看起来应该是这样

    orderSubsConsolidate = ddply(merged, .(RIC,leg), summarize,
                           fill.Quant = sum(fill.Quant),
                           fill.Price = weighted.mean(fill.Price, fill.Quant))
    
  • 2

    另一个解决方案,它为您提供了恕我直言,易于阅读和可重复使用的代码:

    foo <- function(quant, price){
      sum( quant*price ) / sum(price)
    }
    
    ubsConsolidate <- ddply( merged, .(RIC,leg), summarize,
      fill.Quant = sum( fill.Quant ),
      fill.Price = foo( fill.Quant, fill.Price )
    )
    

相关问题