Предположим, у меня есть простой набор данных
df <- data.frame(id=c("A","B","C","D","E","F"),
value=c(1,NA,NA,NA,NA,NA))
Я хочу перекодировать значение (или создать новую переменную), чтобы каждое последующее значение было равно предыдущему значению * 2 + предыдущее значение.
| id | value |
|----|-------|
| A | 1 |
| B | 3 |
| C | 9 |
| D | 27 |
| E | 81 |
| F | 243 |
Я думал, что смогу сделать это, используя лаг:
df <- df %>%
mutate(value=(lag(value)*2)+lag(value))
Но это не сработало. Поэтому вместо этого я использовал для l oop
for (i in 2:nrow(df)){
df[I,"value"] <-(df[i-1,"value"]*2)+df[i-1,"value"]
}
Это работает, но кажется не элегантным. Есть ли лучший способ сделать это с помощью соглашения / инструментов Tidyverse?