You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Data Frame中通过mutate计算累积价格且不覆盖原有数据?

解决方法

方法1:用purrr::accumulate做递推计算

purrr包里的accumulate专门处理这种需要用上一步结果的递推场景,直接从初始price开始,依次累加每一行的difference:

library(dplyr)
library(purrr)

Data <- Data %>%
  mutate(price = accumulate(difference, .init = first(price), ~ .x + .y) %>% tail(-1))

方法2:用累积和cumsum简化计算

本质上后续的price就是初始值加上前面所有difference的累积和,所以可以先算累积和再填充:

library(dplyr)

Data <- Data %>%
  mutate(
    cum_diff = c(NA, cumsum(difference[-1])),
    price = first(price) + cum_diff
  ) %>%
  select(-cum_diff) # 不需要中间列的话可以删掉

运行结果

两种方法都能得到预期结果:

timedifferenceprice
2000NA6
200139
2002413
2003619
2004-811

原代码问题说明

你之前写的mutate(new_price = difference + lag(new_price))没法工作,是因为dplyr的mutate是按列批量计算的,同一轮计算里没法引用刚生成的前一行new_price值,自然得不到递推的结果。

内容的提问来源于stack exchange,提问作者Henry Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 02:15:13