我正在处理在特定年份停止的数据,之后是NA . 我需要根据其他变量的滞后值计算出所有变量 . 我想找到一种计算整个系列的方法,而不是每当一个变量为NA时每年计算一次 . 我正在研究dplyr,因为我正在使用面板数据,因此需要按ID对其进行分组 .
我提供以下示例:
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))
但我想找到一种方法来计算整个serries(考虑到数据的面板维度),而不是重复7次重复代码 . 最好是一个解决方案,你可以从varResults中单独计算varD,因为在最终的应用程序中我有多个相互链接的变量 .
1 回答
建议的解决方案:
从第一个
NA
开始,"recursive"lags
的变量varA
,varB
和varC
等于这些变量的最后一个值 .因此,从这些初始变量开始,我们可以创建新变量:
varA1
,varB1
和varC1
,其中id
用最后一个值填充NA
:id
:然后,我们应用公式: