Rで関数を構築する(またはいくつかの適用を賢く使用する)のに問題があります。次のようなデータセットがあります。
df<- data.frame( id <-sample(1:10,100, replace = T),
price <-runif(20)*100,
q = sample(1:100,100, replace = T))
colnames(df)<-c("id","price","quantity")
ここで、個々の ID ごとに平均価格を計算する必要があります。だから私はこのようにそれぞれ異なるIDでそれを行うことができます:
sum(((df$p[df$id == "1" ])*(df$q[df$id == "1" ])/(sum(df$q[df$id == "1" ]))))
しかし、どうすれば df$id のすべての可能な値を通過させ、合計と一緒に ID も含むマトリックス/df として出力することができますか? 約 6000 の異なる ID と約 180000 の obs があります。それも速くできるといいのですが?
別の方法で分解すると、これが私のデータであると仮定します。
id price quantity
1 10 2
1 20 1
1 50 5
2 5 5
2 3 6
2 10 4
したがって、ID = 1 の場合の解は次のようになります。( 10 * 2 + 20*1 +50 * 5 ) / (2+1+5) = 36.25
これにより、価格 pr が得られます。ID = 1 のすべてのユニットの unit。
およびこのデータ生成を使用して更新set.seed(1234)
:
set.seed(1234)
df<- data.frame( id <-sample(1:10,100, replace = T),
price <-runif(20)*100,
q = sample(1:100,100, replace = T))
colnames(df)<-c("id","price","quantity")
結果は次のようになります。
id avg.price.per.unit
1 33,71
2 29,84
3 44,53
4 36,27
5 69,63
6 35,99
7 45,26
8 58,32
9 33,36
10 9,67
丸みは少しずれているかもしれません。