#r #dataframe #dplyr
#r #фрейм данных #dplyr
Вопрос:
Я хотел бы вычислить данные для двух новых столбцов в data.frame, где результаты основаны на значении предыдущей строки. Однако предыдущую строку также необходимо вычислить, что означает, что между двумя столбцами существует зависимость (входные данные для одного вычисления основаны на выходных данных другого вычисления). Я мог бы сделать это через a for
, но, возможно, это неправильный способ.
Это пример для этого случая:
df <- data.frame(A=c(0.91,0.98,1,1.1), B=c(0.81, 1.11, 0.83, 0.92), C=c(0.09,0.06,0.09,0.08))
df$D <- NA
df$E <- NA
df[1,]$D <- 0.0
Я пробовал это через dplyr::mutate.
df %>%
mutate(D = ifelse( lag(A) < 1, lag(E), lag(E) - lag(E) * lag(A)),
E = B - (B - D) * exp(-C)
)
Вот как должен быть результат:
> df
A B C D E
1 0.91 0.81 0.09 0.00000000 0.06971574
2 0.98 1.11 0.06 0.06971574 0.13029718
3 1.00 0.83 0.09 0.13029718 0.19051977
4 1.10 0.92 0.08 0.00000000 0.07073296
Комментарии:
1. Я не понимаю, как вы выполняете вычисления. Можете ли вы объяснить вычисление значений в ожидаемом выходе?
2. По сути, значение столбца C зависит от значений столбца A предыдущей строки. Если предыдущая строка A меньше 4, то C равно значению столбца D в предыдущей строке. В противном случае C является результатом предыдущей строки
A * B
. Столбец D не использует предыдущую строку, но ему нужен результат столбца C, чтобы получить результат формулы :B - (B - D) * exp(-C)
. Поэтому первая запись столбца D инициализируется нулем.