Я работаю с данными, которые останавливаются в конкретном году, а потом становятся NA.И мне нужно рассчитать множество переменных на основе запаздывающих значений других переменных.Я хотел бы найти способ, которым вычисляется целый ряд, а не каждый раз один год, когда одной из переменных является NA.Я смотрел на dplyr, учитывая, что я работаю с данными панели и, следовательно, нужно сгруппировать их по идентификатору.
Я приведу пример ниже:
set.seed(1)
df <- data.frame( year = c(seq(2000, 2018), seq(2000, 2018)) , id = c(rep(1, 19),rep(2, 19)), varA = floor(rnorm(38)*100), varB= floor(rnorm(38)*100), varC= floor(rnorm(38)*100))
df <- df %>% mutate(varA = if_else(year>2010, as.double(NA) , varA) ,
varB = if_else(year>2010, as.double(NA) , varB),
varC = if_else(year>2010, as.double(NA) , varC)) %>% group_by(id) %>% arrange(year)
Я хотел бы найти способ вычислить переменную, которая равна переменной C, когда она доступна, но впоследствии равнаформула, основанная на запаздывающих значениях переменных C, B и A. При выполнении приведенного ниже кода varResult и D рассчитываются только на один год, учитывая, что лаги доступны только на один год:
df <- df %>% mutate( varD = lag(varA)*lag(varB),
varRESULT = if_else(is.na(varC), lag(varC, 1)/lag(varD, 2)*lag(varD, 1), varC))
НоЯ хотел бы найти способ для немедленного расчета всей серии (с учетом размера панели данных) вместо того, чтобы повторять код 7 раз.Желательно решение, в котором вы можете рассчитывать varD отдельно от varResults, учитывая, что в конечном приложении у меня есть несколько переменных, которые связаны друг с другом.