Я хочу выполнить следующую математическую операцию между двумя переменными в разные периоды времени одного и того же кадра данных:
lag_var = var1(t)/var2(t-1)
> df
var1 var2 lag_var
1 10 NA
3 12 0.3
1 16 0.083
6 19 0.375
16 7 0.84
Любые идеи?





Вы можете добиться этого с помощью функции lag() и mutate, например.
library(dplyr)
df %>% mutate(lag_var = var1 / dplyr::lag(var2))
Данные:
df <- read.table(text = "var1 var2 lag_var
1 10 NA
3 12 0.3
1 16 0.083
6 19 0.375
16 7 0.84", h = T)
Это можно сделать проще всего в dplyr или в базе R:
df <- read.table(text = "var1 var2
1 10
3 12
1 16
6 19
16 7", header = TRUE)
# dplyr
df$lag_dplyr <- df$var1 / dplyr::lag(df$var2)
# Base R
df$lag_base <- sapply(1:nrow(df), function(x) {
l <- df$var1 / df$var2[x - 1]
l[x]})
Выход:
# var1 var2 lag_dplyr lag_base
# 1 1 10 NA NA
# 2 3 12 0.30000000 0.30000000
# 3 1 16 0.08333333 0.08333333
# 4 6 19 0.37500000 0.37500000
# 5 16 7 0.84210526 0.84210526