替换比for循环中的数据更多行

时间:2014-04-28 19:53:01

标签: r for-loop

首先,我确实意识到有一个类似标题的问题,但它似乎没有解决我的问题。

我只是试图建立一个对数股票价格指数,其基数为10,带有这样的for循环:

t <- nrow[dat]

dat$logind <- matrix(NA, t, 1)
dat$logind[1] <- 100

for (i in 2:t) {
  dat$logind[i] <- (dat$logind[i-1] * (1+dat$logr[i])) 
}

dat是数据框,logind只是我为保存索引而创建的列,logr具有对数返回。但是,这会引发以下情况:

Error in `$<-.data.frame`(`*tmp*`, "logind", value = c(100, 99.3891882,  : 
  replacement has 1155 rows, data has 1154

我读到这个错误可以通过使用其他方式选择像dat[,column]这样的列来解决,但是当我已经有[i]时如何使用它?或者,如果您有另一个解决此问题的方法。感谢。

1 个答案:

答案 0 :(得分:0)

我认为你的意思是t <- nrow(dat)而不是t <- nrow[dat]。使用t作为变量名称可能很危险,因为您正在覆盖函数t(矩阵/向量转置)。

您可以使用R矢量化运算符摆脱for循环,如下所示:

dat$longind <- c(100, dat$logind[1:(nrow(dat)-1)] * (1+dat$logr[-1])) )