在R中基于初始值与增长率动态计算列的累积值
动态累积计算解决方案
针对你的需求,使用purrr::accumulate()可以轻松实现逐行动态迭代计算,以下是完整代码:
library(tidyverse) # 构造原始数据 df <- tibble(date = as.Date("2024-07-01"), starting_n = 100, growth_rate = 0.05) %>% bind_rows( tibble(date = seq.Date(as.Date("2024-08-01"), as.Date("2024-09-01"), by = "month"), growth_rate = 0.05) ) # 计算starting_n_calc df <- df %>% mutate( starting_n_calc = accumulate( .x = growth_rate[-1], .f = ~ .x * (1 + .y), .init = first(starting_n) ) %>% tail(-1) %>% c(NA, .) ) # 查看结果 df
运行后输出与预期一致:
# A tibble: 3 × 4 date starting_n growth_rate starting_n_calc <date> <dbl> <dbl> <dbl> 1 2024-07-01 100 0.05 NA 2 2024-08-01 NA 0.05 105 3 2024-09-01 NA 0.05 110.25
代码说明
accumulate()函数接收三个参数:.x:需要迭代计算的序列(这里取第2行及以后的growth_rate).f:迭代逻辑,~ .x * (1 + .y)表示用前一次计算结果.x乘以(1+当前增长率.y).init:初始值,取第一行的starting_n(100)
tail(-1)去掉accumulate返回结果中的初始值,保留后续迭代计算出的105、110.25c(NA, .)在结果开头添加NA,对应第一行无计算值的需求
内容的提问来源于stack exchange,提问作者costebk08
相关产品推荐
相关产品推荐

