我有以下类型的数据框架,其中的日期可能不平衡,并且在RETURN列中可能有一些缺失的数据:
| 日期|代码|退货|
| - ------|- ------|- ------|
| 二零零零年一月一日|资产_1| -0.02 |
| 二零零零年二月一日|资产_1|0.02分|
| 二零零零年三月一日|资产_1|0.01分|
| 二零零零年四月一日|资产_1|0.02分|
| 二零零零年五月一日|资产_1|0.03分|
| 二零零零年六月一日|资产_1| -0.02 |
| 二零零零年七月一日|资产_1|0.05分|
| 二零零零年八月一日|资产_1| -0.04 |
| 二零零零年九月一日|资产_1| -0.02 |
| 二零零零年十月一日|资产_1|无|
| 二○ ○ ○年十一月一日|资产_1|0.05分|
| 二零零零年十二月一日|资产_1|0.03分|
| 二零零零年三月一日|资产_2|不适用|
| 二零零零年四月一日|资产_2| -0.02 |
| 二零零零年五月一日|资产_2|不适用|
| 二零零零年六月一日|资产_2| -0.03 |
| 二零零零年七月一日|资产_2|0.05分|
| 二零零零年八月一日|资产_2|0.02分|
| 二零零零年九月一日|资产_2| -0.03 |
| 二零零零年十月一日|资产_2|0.04|
| 二○ ○ ○年十一月一日|资产_2|0.04|
| 二零零零年十二月一日|资产_2|0.04|
| 二零零一年一月一日|资产_2| -0.03 |
我想计算每项资产从T - 12到T - 2的累计回报。因此,以2001-01-01为例,累计回报将是从2000-01-01到2000-11-01,并将其添加到新列中。
因此,对于2001年1月1日的ASSET_1,我得到的值为0.98 * 1.02 * 1.01 * 1.02 * 1.03 * 0.98 * 1.05 * 0.96 * 0.98 * 1.00 * 1.05 - 1 = 0.08
如果无法计算此类回报(NA值或没有足够的时间来计算此类数字),则累计回报将为NA。
如果不创建一堆滞后(返回)列,我就无法解决这个问题。有更简单的方法吗?
1条答案
按热度按时间bwitn5fc1#
一个快速而粗略的解决方案(假设时间上没有间隙)是计算
cumprod
的累积乘积,然后对每个资产仅延迟第13行或更多行(T0):其中: