使用 yoy 在数据框中创建一个新列 - R 中的更改
Creating a new column in a data frame with yoy - change in R
我想我还没有完全理解数据框的转换功能。
我想建立一个从 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
我编辑了问题,这样更容易理解。
代码应该产生我示例中显示的值,但它没有。我究竟做错了什么?
我如何知道从哪里开始 counting/iterating,换句话说 [-1]
或 [-2]
或...?
非常感谢这个很棒的社区!
我的问题的解决方法很简单:
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) 来 return 所需的 z 向量。当然,也可能有更好的写法。
我想我还没有完全理解数据框的转换功能。 我想建立一个从 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
我编辑了问题,这样更容易理解。
代码应该产生我示例中显示的值,但它没有。我究竟做错了什么?
我如何知道从哪里开始 counting/iterating,换句话说 [-1]
或 [-2]
或...?
非常感谢这个很棒的社区!
我的问题的解决方法很简单:
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) 来 return 所需的 z 向量。当然,也可能有更好的写法。