У меня возникли проблемы с дисконтированием денежных потоков по счету в определенном состоянии с использованием пакета R's dplyr.
В моем примере мы предположим, что набор данных одной учетной записи выглядит следующим образом:
+--------+--------+-------+-----------+--+
| PERIOD | STAGE | RATE | CASH FLOW | |
+--------+--------+-------+-----------+--+
| 1 | Open | 10% | 100 | |
| 2 | Open | 10.5% | 120 | |
| 3 | Open | 10% | 50 | |
| 4 | Open | 11% | 40 | |
| 5 | Closed | 10% | 0 | |
| 6 | Closed | 11% | 0 | |
| 7 | Open | 11% | 30 | |
| 8 | Open | 10% | 40 | |
| 9 | Open | 10.2% | 50 | |
+--------+--------+-------+-----------+--+
Учетная запись находится в «открытой» стадии в течение периодов 1-4 и 7-9.
Я хотел бы рассчитать дисконтированные будущие денежные потоки, используя пакет dplyr в R, на каждую дату наблюдения с использованием ставки, применимой к конкретному периоду.
Желаемый результат должен быть следующим:
| PERIOD | STAGE | RATE | CASH FLOW | PV of Cash Flows |
|--------|--------|-------|-----------|-------------------|
| 1 | Open | 10% | 100 | 279.3797 (1) |
| 2 | Open | 10.5% | 120 | 198.5124 (2) |
| 3 | Open | 10% | 50 | 86.036 (3) |
| 4 | Open | 11% | 40 | 40 |
| 5 | Closed | 10% | 0 | NA |
| 6 | Closed | 11% | 0 | NA |
| 7 | Open | 11% | 30 | 107.6109 (4) |
| 8 | Open | 10% | 40 | 85,37205 (5) |
| 9 | Open | 10.2% | 50 | 50 |
Где:
(1) = 100 + 120 /(1.105) + 50 / {(1.1) (1.105))* (3) = 50 + 40 /(1.11)
(4) = 30 + 40 /(1.1) + 50 / enj(1.102)(1.1) coming
(5) =40 + 50 / (1.102)
Можно ли достичь желаемого результата с помощью синтаксиса dplyr?
Некоторые дополнительные вопросы, связанные с проблемой:
- Кодрешение должно быть общим, то есть разные учетные записи могут иметь разную структуру
- Набор данных, который я использую, относительно большой (поэтому) я бы хотел избежать циклов (если это возможно).
- каждый«Открытая» стадия не зависит от следующей стадии, как показано в иллюстративном примере.Другими словами, денежные потоки периода 7 - 9 не будут учитываться для 1-го этапа «Открыто» в течение периода 1-4.
Буду признателен за любой совет / пример кода.
Заранее спасибо!
Обновление:
Структура данных:
structure(list(Period = 1:9, Stage = structure(c(2L, 2L, 2L,
2L, 1L, 1L, 2L, 2L, 2L), .Label = c("Close", "Open"), class = "factor"),
Rate = c(0.1, 0.105, 0.1, 0.11, 0.1, 0.11, 0.11, 0.1, 0.102
), Cash_flow = c(100, 120, 50, 40, 0, 0, 30, 40, 50)), class = "data.frame", row.names = c(NA,
-9L))