R中如何将数据框growth变量传入accumulate函数替换固定增长率参数
解决方案
要实现迭代时动态调用数据框内的growth列参数,使用purrr::accumulate2()替代原单序列遍历的accumulate()即可,该函数支持同时传入两个序列进行迭代,刚好匹配你的需求。
完整可运行代码如下:
library(dplyr) library(purrr) # 原数据生成逻辑不变 x <- tibble(a = c(1:10), b = c(seq(100, 140, 10), rep(NA_real_, 5)) ) x$growth = runif(10, 0.001, 0.09) # 自定义填充函数无需修改 fill_in <- function(prev, new, growth = 0.03) { if_else(!is.na(new), new, prev * (1 + growth)) } # 仅修改accumulate调用部分 x <- x %>% mutate(b = accumulate2(b, growth[-1], fill_in, .init = first(b)) %>% tail(-1))
修改说明
accumulate2的第一个参数为需要填充的b列,第二个参数为growth[-1]:由于第一行的b值不需要依赖前序计算结果,所以去掉growth列的第一个值,保证第二个序列长度比第一个序列少1,符合accumulate2的参数要求.init = first(b)指定迭代的初始值为b列的第一个有效值tail(-1)用来去掉返回结果中自带的初始值,保证最终结果长度和原数据行数一致
运行后填充NA值时会自动调用对应行的growth列数值,不再使用固定的0.03默认值。
内容的提问来源于stack exchange,提问作者AngeG
相关产品推荐
相关产品推荐

