如何创建一个使用其自身值的先前(滞后)实例的变量?

How to create a variable that uses previous (lagged) instance of its own value?

有一个面板数据集。我必须计算一个新变量:

cases_new = 3^(lag(cases, n=1L))

仅是第一次约会。然后从第二个日期开始,它在自己的值上使用 lag(即先前的实例),即:

cases_new = 3^lag(cases_new, n=1L)

我尝试使用以下代码实现:

df2 <-df1 %>%
  mutate(cases_new = if_else(date == "2020-01-01", 3^(lag(cases, n=1L)), 3^(lag(cases_new, n=1L)))

但是它抛出了一个错误,指出找不到对象 'cases_new'。我什至尝试在上述分配之前初始化 cases_new

df1$cases_new <- NA

但这没有正确更新 cases_new(我得到所有 NA)。有人可以帮我解决这个特殊的递归实现吗?

您可以这样解决您的初始化问题:

df2 <-df1 %>%
  mutate(
    cases_new = 3^(lag(cases, n=1L)),
    cases_new = if_else(date == "2020-01-01", cases_new, 3^(lag(cases_new, n=1L)))
  )

但是,我认为这不会给您想要的值。您将不得不像这样遍历行:

cases_new <- c(3^(lag(cases, n=1L)), rep(0, nrow(df1) - 1))
for (i in 2:nrow(df1)) {
  cases_new[i] <- 3^(lag(cases_new[i - 1], n=1L))
}
df1$cases_new <- cases_new