R Как я могу использовать предыдущее значение из создаваемого столбца

#r #lag

#r #задержка

Вопрос:

Я хотел бы узнать, как использовать предыдущее значение из строки, которую я хочу создать. В Excel это легко, но не получается сделать это правильно в R.

У меня есть следующие данные

 data

d               
6.081371                
7.527626                
30.669937               
5.402242                
37.664694   

#coefficients
w <- tan(pi*(0.5/0.802)/10)
k1 <- 2^0.5*w
k2 <- w^2
a0 <- k2/(1 k1 k2)
k3 <- 2*a0/k2
a1 <- 2*a0
b1 <- -2*a0 k3
b2 <- 1-2*a0-k3
                
  

Я хочу создать новый столбец (g) со следующей формулой:

 data$g <– a0*d a1*(previous value of d) a0*(value 2 positions above of d) b1*(previous value of calculated new column g) b2*(value 2 positions above of new column g)

  

Я могу вычислить первую часть с задержкой, но не могу использовать предыдущие значения созданного столбца
Объем данных превышает 20000 наблюдений, поэтому я не знаю, будет ли цикл хорошим вариантом.

Спасибо!

Комментарии:

1. d <- 11:17 , «предыдущее значение d»: c(NA, head(d, -1)) , «значение на 2 позиции выше d»: c(NA, NA, head(d, -2))

Ответ №1:

Сначала инициализируйте столбец data $ g:

 data$g <- 0
  

Затем:

Изменено ниже на цикл for:

 for i in 3:nrow(data){
   data$g[i] = a0*data$d[i]*a1*data$d[i-1] ao*data$d[i-2] b1*data$g[i-1] b2*data$g[i-2]
}
  

Основная проблема, которую я вижу в этом, заключается в том, что он не будет вычислять первые две строки g .

старый ответ

data$g <– a0*d a1*lag(data$d) a0*lag(data$d, 2) b1*lag(data$g) b2*lag(data$g, 2)

Комментарии:

1. Я получаю столбец с отверстиями с помощью NA

2. Вы запускали данные $ g <- NA перед другим кодом?

3. Да, если я запускаю строку отверстия, я получаю NA. Если я отделяю его, я получаю вычисление, но неправильное. Спасибо за ответы!

4. Ах, это отстой, извините. Еще одна вещь. Вычисляет ли он то, что вы хотите, если вы установите data$g <- 0 ?

5. запуск данных $ g<- 0 заставил линию отверстий работать, но, похоже, она правильно вычисляет только первую строку, я хотел вычислить ее для каждой строки… В любом случае спасибо

Ответ №2:

Думаю, вы лучше всего зацикливаете его, если функция задержки вызывает проблемы — 20 000 строк должны быть довольно быстрыми!

Комментарии:

1. Есть идеи о том, как использовать цикл for в конкретном коде? У меня нет опыта использования циклов for …

2. напишу его завтра — как только моя диссертация будет сдана 🙂