データセットを複数回ループすることでこれを行うことができましたが、data.table を介してこれを行うより効率的な方法があるはずだと考えました。データセットは次のようになります。
CaseID Won OwnerID Time_period Finished
1 yes A 1 no
1 yes A 3 no
1 yes A 5 yes
2 no A 4 no
2 no A 6 yes
3 yes A 2 yes
4 no A 3 yes
5 15 B 2 no
行ごとに、所有者ごとに、その期間の前に終了して勝訴したケースの平均を生成したいと考えています。
CaseID Won OwnerID Time_period Finished AvgWonByOwner
1 yes A 1 no NA
1 yes A 3 no 1
1 yes A 5 yes .5
2 no A 4 no .5
2 no A 6 yes 2/3
3 yes A 2 yes NA
4 no A 3 yes 1
5 15 B 2 no NA
これを詳しく見ると、とてつもなく複雑に思えます。ある種のローリング マージでこれを実行できると思いましたが、行の日付より前のウォンからのみ平均が計算され、同じ ownerID が必要な条件を設定する方法がわかりません。 .
編集 1: 最後の列の数字の説明
AvgWonByOwner Explanation
NA t = 1, No cases finished yet, this could be 0 too
1 t = 3, case 3 finished and is won, so average wins is 1
.5 t = 5, case 3 finished, won; case 4 finished lost; average = .5
.5 t = 4, case 3 finished, won; case 4 finished lost; average = .5
2/3 t = 6, case 3 finished, won, case 4 finished lost, case 1 finished won, average: 2/3
NA t = 1, No cases finished yet, this could be 0 too
1 t = 3, case 3 finished and is won, so average wins is 1
NA t = 1, No cases finished yet, this could be 0 too