从这个数据集开始:
df <- data.frame(
year = 2007,
month = c('Jan', 'Feb', 'Mar', 'April'),
percent_change = c(0.0314, 0.0073, 0.0135, -0.0144),
to_multiply = c(1.0314, 1.0073, 1.0135, .9856)
)
我想生成以下数据集。
year month percent_change to_multiply dollar_value
2007 Jan 0.0314 1.0314 103.1400
2007 Feb 0.0073 1.0073 103.8929
2007 Mar 0.0135 1.0135 105.2955
2007 April -0.0144 0.9856 103.7792
我想知道如何以编程方式分配初始值并创建一个新列,显示每月之后的股票价值。这在电子表格中很容易做到,但我想远离那个,所以我可以使用相同的初始起始值快速绘制不同的开始日期和/或分配。
我尝试使用延迟包装器进行mutate,但是我无法使用它。我看了RCCPRoll,但也无法做到这一点。
答案 0 :(得分:1)
对您有帮助的是cumprod
,但我可以建议您使用data.table
吗?
dt <- data.table(year = 2007,
month = c('Jan', 'Feb', 'Mar', 'April'),
percent_change = c(0.0314, 0.0073, 0.0135, -0.0144),
to_multiply = c(1.0314, 1.0073, 1.0135, .9856))
dt[ , newvalue := cumprod(to_multiply) * 100]
dt
# year month percent_change to_multiply newvalue
# 1: 2007 Jan 0.0314 1.0314 103.1400
# 2: 2007 Feb 0.0073 1.0073 103.8929
# 3: 2007 Mar 0.0135 1.0135 105.2955
# 4: 2007 April -0.0144 0.9856 103.7792
实际上是一个较短的版本:
dt <- data.table(year = 2007,
month = c('Jan', 'Feb', 'Mar', 'April'),
percent_change = c(0.0314, 0.0073, 0.0135, -0.0144))
dt[ , newvalue := 100 * cumprod(1 + percent_change)]
dt
# year month percent_change newvalue
# 1: 2007 Jan 0.0314 103.1400
# 2: 2007 Feb 0.0073 103.8929
# 3: 2007 Mar 0.0135 105.2955
# 4: 2007 April -0.0144 103.7792