2012-07-09 65 views
1

我有一个for循环,将值填充到名为Df的数据框中。我的所有列填充准确,但下面的代码行不产生价值,我想:计算滞后值

for(i in 2:(dim(Df)[1])){ 
Df$dailyReturns200[i] <- (Df$index200[i+1]-Df$index200[i])/Df$index200[i] 
} 

这是P2-P1/P1的简单回报计算。我的一位朋友提出了一个操作顺序问题,但解决方案是什么?

谢谢!

+0

由于您使用了圆括号,因此不能是操作顺序问题。如果你没有,你会得到'P2 - P1',因为除法之前的分割,但你做到了,所以不是这样。 – Joshua 2012-07-09 05:27:27

回答

2

没有一个可重复的例子很难回答,但你不应该需要在一个循环中完成此操作。这是否做你想要的?

#Start with a simple one column matrix 
x <- matrix(1:6, ncol = 1) 

#Compute the diffence, pad with an NA at the front, and then divide by x 
cbind(x, c(NA, diff(x))/x) 
#---- 
    [,1]  [,2] 
[1,] 1  NA 
[2,] 2 0.5000000 
[3,] 3 0.3333333 
[4,] 4 0.2500000 
[5,] 5 0.2000000 
[6,] 6 0.1666667 

从帮助页面,diff()返回suitably lagged and iterated differences.。在这种情况下,所有的差异都是1,然后除以上面的x。有关更多详细信息,请参阅?diff