如何在不使用滞后值的情况下创建一个计算价格变化的新列?

How to create a new column calculating price changes without using lagged values?

各位。感谢您花时间查看我的问题。我很感激。

所以我在处理 R 中的滞后值时遇到了问题,例如 - 我有以下 table:

Semiannual    Price    Start    End    Multiplier   
  2010 Q1      121      .04     .06         1
  2010 Q2      121      .065    .059       1.083
  2011 Q1      121      .061    .063       1.0338
  2011 Q2      121      .057    .087       0.904

以上是我拥有的一些投资组合 ABC 的样本股票数据。本质上,我有 t-0 时的投资组合价格(即 121),开始栏是半年期开始时的开盘价,结束栏是半年期的收盘价。我在每个半年期结束时进行重新平衡,因此,我需要始终保持价格(或我的基数)一致,并且需要我将价格 (121) 乘以开盘价的百分比变化新周期/结束周期的收盘价。所以理想情况下,我的结果是:

Semiannual    Price    Start    End    Multiplier   Actual Price
  2010 Q1      121      .04     .06         1         121
  2010 Q2      121      .065    .059       1.083      131.043
  2011 Q1      121      .061    .063       1.0338     135.4723
  2011 Q2      121      .057    .087       0.904      122.4669

但我终生无法获得将实际价格的滞后值乘以乘数的代码,因为在我开始计算时该列未定义。

我希望我说得有道理...

基本上取实际价格的滞后值 * 每个季度的乘数,但第 1 季度本身就是 (121)。

感谢您提供的任何帮助。

无需查看前几行... 可以使用 cumprod() 计算乘数,我称之为 temp_multiplier ..之后,价格计算很容易。之后删除临时乘数。

df <- read.table(text="Semiannual    Price    Start    End    Multiplier   
2010-Q1      121      .04     .06         1
2010-Q2      121      .065    .059       1.083
2011-Q1      121      .061    .063       1.0338
2011-Q2      121      .057    .087       0.904", header = T)

library( tidyverse )

df %>% mutate ( temp_Multiplier = cumprod( Multiplier ),
                Actual_price = temp_Multiplier * Price ) %>%
  select ( -temp_Multiplier )

#   Semiannual Price Start   End Multiplier Actual_price
# 1    2010-Q1   121 0.040 0.060     1.0000     121.0000
# 2    2010-Q2   121 0.065 0.059     1.0830     131.0430
# 3    2011-Q1   121 0.061 0.063     1.0338     135.4723
# 4    2011-Q2   121 0.057 0.087     0.9040     122.4669