r - 如何创建一个使用其自身值的先前(滞后)实例的变量?
问题描述
有一个面板数据集。我必须计算一个新变量:
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
推荐阅读
- python - 复杂的乐透号码生成器 - Python
- format - 将标量从 sif 转换为 hrf
- powershell - 删除两个字符串之间的行powershell
- cmake - 在 Linux 环境中使用 cmake 安装时 HDF5 的未定义符号
- python - 谷歌云功能的内存分析器?
- javascript - 鼠标悬停上的 Js - 从两个 div 中查找匹配的文本
- azure - 如何使用 Visual Studio 2017 中的资源组项目自动部署 Function App 内容?
- c# - 我在哪里放置 GC.KeepAlive?
- c# - 安装在 Program Files 中时保存 App.Exe.Config
- javascript - 反应:在不将整个 DOM 元素作为道具传递的情况下更改模式的内容?