Я хотел бы попросить вашей помощи по следующей проблеме.
В табличном объекте, где каждая строка соответствует наблюдению во времени, я хотел бы получить значение из предыдущей строки для одной конкретной переменной (: = p0), умножить его на элемент другого столбца (: = returnfactor) и записать результат в текущую строку как элемент другого столбца (: = p1).
Иллюстрированный через две картинки, я хочу перейти от

до
.
Я написал
matrix <- cbind (
1:10,
1+rnorm(10, 0, 0.05),
NA,
NA
)
colnames(matrix) <- c("timeid", "returnfactor", "p0", "p1")
matrix[1, "p0"] <- 100
for (i in 1:10)
{
if (i==1)
{
matrix[i, "p1"] <- matrix[1, "p0"] * matrix[i, "returnfactor"]
}
else
{
matrix[i, "p0"] <- matrix[i-1, "p1"]
matrix[i, "p1"] <- matrix[i, "p0"] * matrix[i, "returnfactor"]
}
}
То есть я реализовал то, чего хотел бы достичь, используя цикл. Однако этот цикл слишком медленный. Очевидно, я новичок в R.
Не могли бы вы дать мне подсказку, как улучшить скорость, используя возможности, которые предлагает R? Я предполагаю, что здесь нет необходимости в цикле, хотя у меня нет подхода, как сделать это еще. В SAS я использовал чтение фреймов данных по строкам и retain
-статей в шаге данных.
С уважением,
Sinistrum