gpt4 book ai didi

使用 dplyr 的递归函数

转载 作者:行者123 更新时间:2023-12-03 16:05:03 26 4
gpt4 key购买 nike

我有数据:

dat <- tibble(
day = 200:210,
x = sample(-10:10, size = 11,replace = T))

我有一个变量 y初始值为2。我想计算 y的最终值通过在给定的时间步长中将 x 添加到 y
以下符号:
y[i] = y[i-1] + x

如果我这样做:
y <- 5
dat %>% mutate(y = y + x)

它将 y 添加到每个 x。
# A tibble: 11 x 3
day x y
<int> <int> <dbl>
1 200 4 9
2 201 3 8
3 202 -4 1
4 203 -7 -2
5 204 -3 2
6 205 1 6
7 206 -5 0
8 207 -1 4
9 208 -4 1
10 209 -2 3
11 210 4 9

The answer should be:

# A tibble: 11 x 3
day x y
<int> <int> <dbl>
1 200 4 9
2 201 3 12
3 202 -4 8
4 203 -7 1
5 204 -3 -2
6 205 1 -1
7 206 -5 -6
8 207 -1 -7
9 208 -4 -11
10 209 -2 -13
11 210 4 -9

如何使用 dplyr 包实现此目的?或任何其他快速且快速的方法。

编辑

如果我想强加一个条件,使得 y 不能超过 10 或为负。如果超过 10,则设为 10,如果为负,则设为零。
我如何实现这一目标:

一点点:11 x 3
      day     x     y     y1
1 200 4 9 9
2 201 3 12 10
3 202 -4 8 6
4 203 -7 1 0
5 204 -3 -2 0
6 205 1 -1 0
7 206 -5 -6 0
8 207 -1 -7 0
9 208 -4 -11 0
10 209 -2 -13 0
11 210 4 -9 0

最佳答案

我们可以使用 accumulate来自 purrr .与 accumulate ,做递归sum 'x' 个元素,同时以 5 的值( .init = 5 )开始并删除 accumulate 的第一个元素输出 ( [-1] )

library(purrr)
library(dplyr)
dat %>%
mutate(y = accumulate(x, ~ .x + .y, .init = 5)[-1])
# A tibble: 11 x 3
# day x y
# <int> <int> <dbl>
# 1 200 4 9.00
# 2 201 3 12.0
# 3 202 -4 8.00
# 4 203 -7 1.00
# 5 204 -3 - 2.00
# 6 205 1 - 1.00
# 7 206 -5 - 6.00
# 8 207 -1 - 7.00
# 9 208 -4 -11.0
#10 209 -2 -13.0
#11 210 4 - 9.00
base R 中的类似方法将是
dat$y <- Reduce(function(u, v)  u + v , dat$x, init = 5, accumulate = TRUE)[-1]
dat$y
#[1] 9 12 8 1 -2 -1 -6 -7 -11 -13 -9

关于使用 dplyr 的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48868104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com