首页 > 解决方案 > 如何创建一个使用其自身值的先前(滞后)实例的变量?

问题描述

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

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)。有人可以帮我解决这个特定的递归实现吗?

标签: rrecursionlag

解决方案


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

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

推荐阅读