如何在不使用滞后值的情况下创建一个计算价格变化的新列?
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
各位。感谢您花时间查看我的问题。我很感激。
所以我在处理 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