我可以在ddply()中进行保证金计算吗?

时间:2010-01-05 16:33:26

标签: r plyr

cast()函数非常适合计算聚合值的边距:

cast(df, IDx1+IDx2~IDy1, margins=c('IDx1','IDx2','grand_row'),c(min, mean, max))

问题是我需要使用第二个向量和自定义函数来加权。

当然,ddply()允许我将自定义聚合函数应用于我的分组记录:

ddply(d, IDx1+IDx2~IDy1 , function(x) 
c(
min(x$value),
MyFancyWeightedHarmonicMeanFunction(x$value,x$weight),
max(x$value)
)
)

......这太棒了。

但真正能挽救这一天的是能够同时做两件事,无论是通过调用cast()中的双向量函数还是通过伪造margins=()变量来ddply(). }

这可能吗?

1 个答案:

答案 0 :(得分:2)

自己计算边距非常好:

ddply(d, "IDX1", ...) 
ddply(d, c("IDX1", "IDX2"), ...)
ddply(d, "IDy1", ...)

然后将结果与rbind结合起来。把它包装成一般函数并不太难。

另外,我将原始代码重写为:

ddply(d, IDx1+IDx2~IDy1, summarise, 
  min = min(value),
  wt.mean = MyFancyWeightedHarmonicMeanFunction(value, weight),
  max = max(value)
)