0

このcast()関数は、集計値のマージンを計算するのに最適です。

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

問題は、2番目のベクトルとカスタム関数を使用して平均に重みを付ける必要があることです。

もちろん、ddply()グループ化されたレコードにカスタム集計関数を適用できます。

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

...そしてこれは素晴らしいです。

しかし、実際に1日を節約できるのは、で2ベクトル関数を呼び出すか、で変数をcast()偽造することによって、両方のことを同時に実行できることです。margins=()ddply().

これは可能ですか?

4

1 に答える 1

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)
)
于 2010-01-05T23:29:41.210 に答える