R 贴现未来现金流

R 贴现未来现金流,r,dplyr,R,Dplyr,我在使用R的dplyr包对特定状态下的账户现金流进行贴现时遇到了一些问题 在我的示例中,我们假设一个帐户的数据集如下所示: +--------+--------+-------+-----------+--+ | PERIOD | STAGE | RATE | CASH FLOW | | +--------+--------+-------+-----------+--+ | 1 | Open | 10% | 100 | | | 2 | Open

我在使用R的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 |  |
+--------+--------+-------+-----------+--+

| 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-4和7-9期间处于开放阶段

我希望在每个观察日使用适用于特定时期的利率,使用R中的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 |  |
+--------+--------+-------+-----------+--+

| 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.11.105}+40/{1.111.11.105}

2=120+50/1.1+40/{1.111.1}

3=50+40/1.11

4=30+40/1.1+50/{1.1021.1}

5=40+50/1.102

使用dplyr语法是否可以达到预期的结果

与该问题有关的其他一些问题:

代码解决方案必须是通用的,即不同的帐户可能具有不同的结构 我使用的数据集相对较大,因此如果可能,我希望避免循环。 如示例所示,每个开放阶段独立于下一阶段。换句话说,在第1-4期的第一个开放阶段,将不考虑第7-9期的现金流。 如有任何建议/示例代码,我将不胜感激

提前谢谢

更新:

数据结构:

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))
下面是一个使用dplyr和少量数据混合的解决方案。表:


你试过什么?你能用dput以一种可复制的格式共享数据吗?我已经在原始帖子中添加了数据结构。目前,我还不知道如何在不使用循环的情况下,利用未来每个时间段的利率和现金流对剩余观测值的现金流进行贴现的情况下实现这一点。