R を使用して、以前のすべての処方箋を考慮して、個人が補充を行ったときにすでに手元にある処方箋の日数を測定しようとしています。例えばこんなテーブルだったら…
member rx_id fill_date to_date days_supply
1 A 1 2018-10-01 2018-10-02 2
2 B 1 2016-11-07 2016-11-10 4
3 B 2 2016-11-07 2016-12-04 28
4 B 3 2016-11-08 2016-11-09 2
5 B 4 2016-11-10 2016-12-03 24
次の出力が期待されます
member rx_id fill_date to_date days_supply_on_hand
1 A 1 2018-10-01 2018-10-02 0
2 B 1 2016-11-07 2016-11-10 0
3 B 2 2016-11-07 2016-12-04 4
4 B 3 2016-11-08 2016-11-09 30
5 B 4 2016-11-10 2016-12-03 26
メンバーBの場合、最初のスクリプトと同じ日に2番目のスクリプトが満たされると、個人はすでに4日分のRXを手元に持っています. 3 番目のスクリプトがいっぱいになると、個人には最初のスクリプトから 3 日、2 番目のスクリプトから 27 日 (合計 30) が残っています。4 番目のスクリプトがいっぱいになると、3 番目のスクリプトは使い果たされますが、最初のスクリプトから 1 日、3 番目のスクリプトから 25 日 (合計 26) が残ります。
dplyr と data.table の両方でローリング トータルを行う方法は知っていますが、以前の記録に基づいて、個々のベースでさまざまなレベルの枯渇を考慮する方法がわかりません。以下は元のテーブルを作り直すためのコードです。
structure(list(member = structure(c(1L, 2L, 2L, 2L, 2L), .Label =
c("A",
"B"), class = "factor"), rx_id = c(1, 1, 2, 3, 4), fill_date =
structure(c(17805,
17112, 17112, 17113, 17115), class = "Date"), to_date =
structure(c(17806,
17115, 17139, 17114, 17138), class = "Date"), days_supply = c(2,
4, 28, 2, 24)), .Names = c("member", "rx_id", "fill_date",
"to_date",
"days_supply"), row.names = c(NA, -5L), class = "data.frame")