У меня есть такой фрейм данных:
Я хочу заменить NA в «Y» на основе функции A, B и предыдущего значения Y, такого что Y = Prior Y + A - B
Поэтому окончательный результат должен быть:
Это кажется простой проблемой, но между всеми различными функциями (применить, уменьшить, накопить, отложить и т. д.) я не уверен, что это лучший подход. Надеюсь на решение с dplyr. Спасибо!
Вы можете использовать cumsum() для комбинированного вектора c(Y[1], (A - B)[-1]):
library(dplyr)
dat %>%
mutate(Y = cumsum(c(Y[1], (A - B)[-1])))
# A tibble: 4 × 4
Index A B Y
<dbl> <dbl> <dbl> <dbl>
1 1 2 1 1
2 2 2 1 2
3 3 2 1 3
4 4 2 1 4
Подтверждение того, что это работает - после того, как я разместил этот вопрос, я связался с другом, и он также предложил мне попробовать cumsum, но ваш код намного элегантнее, чем то, что я реализовал. В моей реальной проблеме «Y [1]» на самом деле является последней строкой (последней определенной как максимальная дата) для группы, но я могу посмотреть это значение отдельно.