我想我还没有完全理解数据帧的转换功能。 我想构建一个新的索引(新列),它从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]
或......?
非常感谢这个令人敬畏的社区!
答案 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向量。当然,有可能有更好的方法来写这个。