在 mutate() 函数中使用 lag() 时出现问题 (tidyverse)

Cos*_*tle 4 r dplyr

我正在尝试向数据框中添加另一列,其中新列是新列中先前值和当前行值的函数。我尝试删除不相关的代码并保留简单的数字,以便我可以理解这里的答案。给定以下数据框:

\n
  x\n1 1\n2 2\n3 3\n4 4\n5 5\n
Run Code Online (Sandbox Code Playgroud)\n

下一列 (y) 会将 5 加到 x 上,并加上上一行的 y 值。第一行中没有 y 的先前值,因此我将其定义为 0。因此 y 的第一行值将是 x+5+0 或 1+5+0 或 6。第二行将是 x+5+ y(从第一行开始)或 2+5+6 或 13。数据框应如下所示:

\n
  x  y\n1 1  6\n2 2 13\n3 3 21\n4 4 30\n5 5 40\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试使用 case_when() 和 lag() 函数,如下所示:

\n
test_df <- data.frame(x = 1:5)\ntest_df %>% mutate(y = case_when(x==1 ~ 6,\n+                                    x>1 ~ x+5+lag(y)))\n
Run Code Online (Sandbox Code Playgroud)\n
\n

错误:mutate()列有问题y。\n\xe2\x84\xb9 y = case_when(x == 1 ~ 6, x > 1 ~ x + 5 + lag(y))。\n未找到 x 对象“y”\n运行rlang::last_error()以查看发生错误的位置。

\n
\n

我原以为 y 是在计算第一行时定义的。有一个更好的方法吗?谢谢!

\n

All*_*ron 6

lag你根本不需要这里。只要一个cumsum应该就足够了。

test_df %>% mutate(y = cumsum(x + 5))

#>   x  y
#> 1 1  6
#> 2 2 13
#> 3 3 21
#> 4 4 30
#> 5 5 40
Run Code Online (Sandbox Code Playgroud)

数据

test_df <- data.frame(x = 1:5)
Run Code Online (Sandbox Code Playgroud)