所有人。感谢您抽出宝贵时间来查看我的问题。我很感激。
例如,我遇到R中滞后值的麻烦-我有下表:
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
但是我一生都无法获得将实际价格的滞后值乘以乘数的代码,因为开始计算时未定义该列。
我希望我有道理...
本质上采用的是实际价格的滞后值*每个季度的乘数,但第一季度本身就是自身(121)。
感谢您提供的任何帮助。
答案 0 :(得分:1)
无需查看先前的行...
可以使用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