#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. напишу его завтра — как только моя диссертация будет сдана 🙂