Я думаю, что более надежным подходом было бы создание необходимых столбцов (в данном случае суммы из первых двух строк, используемых в третьей), а затем использование чего-то вроде dplyr::case_when
для запуска различных вычислений в строке:
library(dplyr)
df2 <- df %>%
mutate(sums = X2014 + X2015) %>%
mutate(Bundled = case_when(variable %in% c("a", "b") ~ sums * 1.0,
variable == "c" ~ lag(sums,2) / lag(sums),
TRUE ~ (lag(X2014,3) * X2014 +
lag(X2015,3) * X2015) / 7)) %>%
select(-sums)
> df2
variable X2014 X2015 Bundled
1 a 3 4 7.000000
2 b 2 1 3.000000
3 c 0 3 2.333333
4 d 2 3 2.571429
(Обратите внимание, это основано на слегка измененном вводе, чтобы избежать столбцов с числовыми именами.)
# data used above:
df <- structure(list(variable = c("a", "b", "c", "d"), X2014 = c(3L,
2L, 0L, 2L), X2015 = c(4L, 1L, 3L, 3L)), .Names = c("variable",
"X2014", "X2015"), class = "data.frame", row.names = c("1", "2",
"3", "4"))