如何创建一个使用其自身值的先前(滞后)实例的变量?
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
有一个面板数据集。我必须计算一个新变量:
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