2016-01-21 171 views
1

我需要计算某个点的实际值,而不是该点的相对变化。我有特定的时间序列数据(%到上一期),需要在某个时间获得资产的实际价值。喜欢的东西:r列中的另一列乘以列

Day0 Day1 Day2 Day3 
100 1.05 1.05 1.05 
100 1.01 1.01 1.01 
100 0.99 0.99 0.99 

应该是这样的:

Day0 Day1 Day2 Day3 
100 105 110.25 115.76 
100 101 102.01 103.03 
100 99 98.01 97.02 

我相信我一定要用replaceapply在这里,但我有1列的困难。我不知道如何避免使用function,它将每列乘以前一列。

+0

不是在PC上的权利,但它应该是这样的应用(DF,1,cumprod)。 – Laterow

回答

5

试试这个:

DF[] <- Reduce(`*`, DF, accumulate = TRUE) 

这给

Day0 Day1 Day2  Day3 
1 100 105 110.25 115.7625 
2 100 101 102.01 103.0301 
3 100 99 98.01 97.0299 

这工作,因为一个data.frame是列的列表。


或者,如@akrun建议:

t(apply(DF, 1, cumprod)) 
+1

非常好的一个。荣誉。 –

+2

@弗兰克没关系。你可以在混合中加入。 – akrun

+1

谢谢你们两位。 – Bear