使用yoy在数据框中创建新列 - 在R中更改

时间:2015-01-21 10:08:45

标签: r dataframe transform

我想我还没有完全理解数据帧的转换功能。 我想构建一个新的索引(新列),它从100开始,并通过将第一个值(100)乘以" 1 + delta"来增加值。下一个值将是刚刚计算的值增加" 1 + delta"等

以下是我的例子:

x = c(2000,2001,2002,2003,2004,2005,2006)   
delta = c(0.04,0.05,0.08,0.1,0.01,0.02)   
df = data.frame(x,delta)

df = transform(df, z=c(100,z[-2]*(1+df$delta[-1])))

预期结果应该是有序的:

     x    delta        z
1 2000          NA 100.0000
2 2001  0.04000000 104.0000
3 2002  0.05000000 109.2000
4 2003  0.08000000 117.9360
5 2004  0.10000000 129.7296
6 2005  0.01000000 131.0269
7 2006  0.02000000 133.6474

我编辑了问题,因此更容易理解。

代码应该生成我的示例中显示的值,但它不会。我究竟做错了什么? 我怎么知道从哪里开始计算/迭代,换句话说[-1][-2]或......?

非常感谢这个令人敬畏的社区!

1 个答案:

答案 0 :(得分:0)

我的问题的解决方案很简单:

x = c(2000,2001,2002,2003,2004,2005,2006)   
delta = c(0.04,0.05,0.08,0.1,0.01,0.02)   
df = data.frame(x,delta)

delta2 = 1+delta
z = 100*cumprod(delta2)
z

我使用函数cumprod(x)返回所需的z向量。当然,有可能有更好的方法来写这个。