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

R语言按id与break标识分组拆解累计求和值获取单日数值

R语言实现累计值拆解为单日实际值

需求说明

现有数据集ds,包含4个字段:

  • id:主体标识
  • date:日期
  • values:累计求和值
  • break.:累计重置标识,取值为"True"时累计过程重置,之后重新开始累计
    需要按id分组后,在相邻两次break. == "True"的区间内计算单日实际值:后一日累计值减去前一日累计值,差值为负时取值为0,每个重置区间的首行对应值为当日实际值。

实现代码

使用dplyr包即可快速实现需求,代码如下:

library(dplyr)
library(lubridate)

# 读取示例数据(未执行过可运行)
ds <- read.csv("https://raw.githubusercontent.com/Leprechault/trash/main/accumulated_values_table")
ds$date <- ymd(ds$date)

# 计算单日值
ds_result <- ds %>%
  # 按id分组,按日期排序保证时间顺序正确
  group_by(id) %>%
  arrange(date, .by_group = TRUE) %>%
  # 生成重置分组:每次遇到break.为True时进入新的分组
  mutate(reset_grp = cumsum(break. == "True")) %>%
  # 按id和重置分组二次分组
  group_by(id, reset_grp) %>%
  # 计算单日值:组内首行取原值,后续行取与前一行的差值,负值取0
  mutate(values = pmax(values - lag(values, default = 0), 0)) %>%
  ungroup() %>%
  # 去掉辅助计算列
  select(-reset_grp)

结果验证

筛选id=3的结果查看,即可匹配预期输出:

ds_result %>% filter(id == 3) %>% head()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:00:01