Сначала: table
- плохое имя для пользовательской переменной, так как оно соответствует зарезервированной базовой R-функции.
Вот решение, использующее цикл for
.
(Просто для предотвращения любых возражений for
от цикла: мы не динамически растем объект здесь, а вместо этого меняем предварительноинициализированные записи, поэтому цикл for
будет быстрым, это не значит, что более быстрых путей не будет ...):
# Initialise
df <- transform(df, c = a * b);
# Calculate c for rows 2..
for (i in 2:nrow(df)) df$c[i] <- (df$c[i - 1] + df$a[i]) * df$b[i];
df;
# a b c
#1 100 0.2 20.0000
#2 100 0.3 36.0000
#3 100 0.4 54.4000
#4 100 0.5 77.2000
#5 100 0.6 106.3200
#6 100 0.7 144.4240
#7 100 0.8 195.5392
#8 100 0.9 265.9853
Пример данных
df <- data.frame(
a = rep(100, 8),
b = seq(from = 0.2, by = 0.1, length.out = 8))