我正在尝试向数据框中添加另一列,其中新列是新列中先前值和当前行值的函数。我尝试删除不相关的代码并保留简单的数字,以便我可以理解这里的答案。给定以下数据框:
\n x\n1 1\n2 2\n3 3\n4 4\n5 5\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n我尝试使用 case_when() 和 lag() 函数,如下所示:
\ntest_df <- data.frame(x = 1:5)\ntest_df %>% mutate(y = case_when(x==1 ~ 6,\n+ x>1 ~ x+5+lag(y)))\nRun Code Online (Sandbox Code Playgroud)\n\n\n错误:
\nmutate()列有问题y。\n\xe2\x84\xb9y = case_when(x == 1 ~ 6, x > 1 ~ x + 5 + lag(y))。\n未找到 x 对象“y”\n运行rlang::last_error()以查看发生错误的位置。
我原以为 y 是在计算第一行时定义的。有一个更好的方法吗?谢谢!
\nlag你根本不需要这里。只要一个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)
| 归档时间: |
|
| 查看次数: |
457 次 |
| 最近记录: |