如何创建一个变量,该变量取决于其先前的值以及 R 中的另一个变量

How can I create a variable that depends on its previous value as well as another variable in R

我是 R 的新手,非常感谢您的帮助。

我有一个面板数据集(公司、年份)和其他变量(数字、X 和 Y)。 给出了所有年份的 X,但我只有每个公司第一年的 Y。 我对 generating/replacing Y=NA

期间的 Y 值感兴趣

Y 的公式如下。

Yt= Xt + 0.85*Yt-1。 即 Y 的当前值取决于 X 以及 Y 的先前值。

我的问题是如何替换 Y 的后续值。

例如

data<-data.frame(id=c(rep(1,3),rep(2,3)), year=c(2000:2002,2002:2004),number=rep(1:3,2), X=c(10,20,30,20,40,10), Y=c(30,NA,NA,50,NA,NA))

我试过下面的代码,但由于某些原因它没有在计算中使用 Y 的滞后值。

library(dplyr)
library(plm)

data<- data %>%
  group_by(id)%>%
  mutate(Y = replace(Y, number!=1, 0.85*lag(data$Y)+ X)) 

希望得到如下结果

data<-data.frame(id=c(rep(1,3),rep(2,3)), year=c(2000:2002,2002:2004),number=rep(1:3,2), X=c(10,20,30,20,40,10), Y=c(30,45.5,68.675,50,82.5,80.125))

谁能告诉我如何正确执行此操作?

这里可以用accumulate

library(dplyr)
library(purrr)
data %>% 
   group_by(id) %>% 
   mutate(Y = accumulate(X[-1], ~ 0.85 * .x + .y, .init = first(Y))) %>% 
   ungroup

-输出

# A tibble: 6 × 5
     id  year number     X     Y
  <dbl> <int>  <int> <dbl> <dbl>
1     1  2000      1    10  30  
2     1  2001      2    20  45.5
3     1  2002      3    30  68.7
4     2  2002      1    20  50  
5     2  2003      2    40  82.5
6     2  2004      3    10  80.1

数据

data <- structure(list(id = c(1, 1, 1, 2, 2, 2), year = c(2000L, 2001L, 
2002L, 2002L, 2003L, 2004L), number = c(1L, 2L, 3L, 1L, 2L, 3L
), X = c(10, 20, 30, 20, 40, 10), Y = c(30, NA, NA, 50, NA, NA
)), class = "data.frame", row.names = c(NA, -6L))

这是简单循环起作用的情况之一。

for (i in 1:nrow(data)) {
   if(is.na(data$Y[i])) {
      data$Y[i] <- 0.85*data$Y[i-1] + data$X[i]
   }
}
data