R data.frame を、data.frame 内の変数の 1 つの累積合計と同じ量で集計したいと考えています。私はかなりグーグルで検索しましたが、おそらく何か役に立つものを見つけるための正しい用語を知りません.
このdata.frameがあるとします:
> x <- data.frame(cbind(p=rnorm(100, 10, 0.1), v=round(runif(100, 1, 10))))
> head(x)
p v
1 10.002904 4
2 10.132200 2
3 10.026105 6
4 10.001146 2
5 9.990267 2
6 10.115907 6
7 10.199895 9
8 9.949996 8
9 10.165848 8
10 9.953283 6
11 10.072947 10
12 10.020379 2
13 10.084002 3
14 9.949108 8
15 10.065247 6
16 9.801699 3
17 10.014612 8
18 9.954638 5
19 9.958256 9
20 10.031041 7
x をより小さな data.frame に減らしたいと思います。各行には、v の n 単位の量に対応する、v で重み付けされた p の加重平均が含まれます。この種の何か:
> n <- 100
> cum.v <- cumsum(x$v)
> f <- cum.v %/% n
> x.agg <- aggregate(cbind(v*p, v) ~ f, data=x, FUN=sum)
> x.agg$'v * p' <- x.agg$'v * p' / x.agg$v
> x.agg
f v * p v
1 0 10.039369 98
2 1 9.952049 94
3 2 10.015058 104
4 3 9.938271 103
5 4 9.967244 100
6 5 9.995071 69
最初の質問です。上記のコードに対するより良い (より効率的なアプローチ) があるかどうか疑問に思っていました。より重要な 2 番目の質問は、より正確なバケットを取得するために上記のコードを修正する方法です。つまり、 の各行には、上記のようにおおよそではなく、正確に の単位がx.agg
含まれている必要があります。たとえば、最初の行には の98 単位に対応する最初の 17 行の集計が含まれます。次の行 (18 番目) には の 5 単位が含まれており、次のバケットに完全に含まれています。代わりに達成したいのは、行 18 の 2 単位を最初のバケットに割り当て、残りの 3 単位を次のバケットに割り当てることです。100
v
x
v
v
提供されたヘルプに事前に感謝します。