Да предположим, че имам прост набор от данни
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))
Но това не проработи. Затова вместо това използвах for цикъл
for (i in 2:nrow(df)){
df[I,"value"] <-(df[i-1,"value"]*2)+df[i-1,"value"]
}
Това работи, но изглежда неелегантно. Има ли по-добър начин да направите това с помощта на конвенции/инструменти на tidyverse?