gpt4 book ai didi

用 dplyr 递归

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

我有数据

library(dplyr, warn.conflicts = FALSE)
mtcars %>%
as_tibble() %>%
select(mpg, qsec) %>%
head(5) %>%
mutate(new_col = c(10, rep(NA, times = nrow(.)-1)))
#> # A tibble: 5 × 3
#> mpg qsec new_col
#> <dbl> <dbl> <dbl>
#> 1 21 16.5 10
#> 2 21 17.0 NA
#> 3 22.8 18.6 NA
#> 4 21.4 19.4 NA
#> 5 18.7 17.0 NA

我需要一个针对 new_col 的解决方案,例如 mpg + qsec - lag(new_col) 但需要递归。
对于第二行:21 + 17.0 - 10 = 28
对于第三个:22.8 + 18.6 - 28(从第二行开始)= 13.4

预期输出:

#> # A tibble: 5 × 3
#> mpg qsec new_col
#> <dbl> <dbl> <dbl>
#> 1 21 16.5 10
#> 2 21 17.0 28
#> 3 22.8 18.6 13.4
#> 4 21.4 19.4 27.4
#> 5 18.7 17.0 8.3

最佳答案

您可以使用 purrr::accumulate()(如果您愿意,也可以使用 base::Reduce()):

library(dplyr)
library(purrr)

mtcars %>%
as_tibble() %>%
select(mpg, qsec) %>%
head(5) %>%
mutate(new_col = accumulate(tail(mpg + qsec, -1), .f = ~ .y - .x, .init = 10))

# A tibble: 5 × 3
mpg qsec new_col
<dbl> <dbl> <dbl>
1 21 16.5 10
2 21 17.0 28.0
3 22.8 18.6 13.4
4 21.4 19.4 27.4
5 18.7 17.0 8.27

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

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