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

R 按series分组降序排序后计算area列累计运行差值的实现方法

实现方案

你需要的累计迭代减法可以通过purrr::accumulate函数实现,完全适配dplyr管道框架,代码如下:

library(tidyverse)

df_diffs <- df %>%
  dplyr::group_by(series) %>%
  # 分组内按year降序排序,保证计算顺序正确
  dplyr::arrange(desc(year), .by_group = TRUE) %>%
  # accumulate迭代计算累计差值:首项取area原值,后续每一项=上一步计算结果-当前area
  dplyr::mutate(diff = purrr::accumulate(area, ~.x - .y)) %>%
  dplyr::ungroup()

逻辑说明

  • purrr::accumulate会遍历每组的area列,第一个元素直接返回作为首行diff值,后续每个值都用前一步的计算结果减去当前行area,完全匹配你的计算规则
  • 自动处理多分组场景,不会出现跨组计算的问题
  • 全程在dplyr管道中运行,可以直接接入你现有的业务逻辑

无额外依赖备选方案

如果不想引入purrr依赖,也可以用基础R的Reduce函数实现,效果完全一致:

df_diffs <- df %>%
  dplyr::group_by(series) %>%
  dplyr::arrange(desc(year), .by_group = TRUE) %>%
  dplyr::mutate(diff = Reduce(function(prev, curr) prev - curr, area, accumulate = TRUE)) %>%
  dplyr::ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:36:07