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().
}
这可能吗?
答案 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)
)