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

基于前值的滚动行减法:计算各重复样本的最终体积

问题:计算累积递减的最终体积

我有一张包含各类参数的表格,每个重复样本(replicate)对应一个体积损失(Volume_loss)。需要新增一列Final_Volume(最终体积),规则如下:

  • 第1个样本的最终体积 = 起始体积(start) - 对应体积损失
  • 后续样本的最终体积 = 前一个样本的最终体积 - 当前体积损失

数据

replicate=c(1:6)
start=c(2982)
Volume_loss=c(419.29,450.69,409.73,405.67,367.81,448.61)

当前冗余实现

mutate(Final_Volume= ifelse(replicate=="1", start-Volume_loss, Volume_loss))
mutate(Final_Volume= if_else(replicate!="1", dplyr::lag(Final_Volume)-Volume_loss,Final_Volume))
mutate(Final_Volume= if_else(replicate!=1:2, dplyr::lag(Final_Volume)-Volume_loss,Final_Volume))
mutate(Final_Volume= if_else(replicate!=1:3, dplyr::lag(Final_Volume)-Volume_loss,Final_Volume))
mutate(Final_Volume= if_else(replicate!=1:4, dplyr::lag(Final_Volume)-Volume_loss,Final_Volume))
mutate(Final_Volume= if_else(replicate!=1:5, dplyr::lag(Final_Volume)-Volume_loss,Final_Volume))

预期输出

表格包含replicate、Volume_loss、Final_Volume三列,Final_Volume列的结果依次为:2562.71、2112.02、1702.29、1296.62、928.81、480.20


简洁实现方案

利用cumsum()累积求和函数可以一步完成计算,无需多次调用mutate和条件判断:

library(dplyr)

# 构造数据框
df <- tibble(
  replicate = 1:6,
  Volume_loss = c(419.29,450.69,409.73,405.67,367.81,448.61),
  start = 2982
)

# 计算最终体积
df <- df %>%
  mutate(Final_Volume = start - cumsum(Volume_loss))

代码说明

  • cumsum(Volume_loss)会生成体积损失的累积序列:第1个值为419.29,第2个值为419.29+450.69=870.08,以此类推
  • 用起始体积减去该累积序列,正好得到每个样本的最终体积,完全符合需求

运行后得到的Final_Volume列与预期结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 15:36:02