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

如何统计分组内连续value的增幅?求更简洁的dplyr实现方案

dplyr 计算分组内连续上涨幅度优化方案

需要使用dplyr >= 1.1.0 版本(内置consecutive_id函数实现连续序列标记),以及stringr处理字符串拼接。

核心实现代码

library(dplyr)
library(stringr)

df %>%
  group_by(name, Utt) %>%
  summarise(
    increase_size = {
      # 计算相邻值差值
      diff_vals <- value - lag(value)
      # 标记连续上涨/非上涨段
      incr_group <- consecutive_id(diff_vals > 0)
      # 按段求和上涨差值
      incr_total <- tapply(diff_vals, incr_group, sum, na.rm = TRUE)
      # 提取所有有效上涨段的和
      valid_incr <- incr_total[names(incr_total) == "TRUE"]
      # 无上涨段返回NA,否则拼接为字符串
      if (length(valid_incr) == 0) NA_character_ else str_c(valid_incr, collapse = ", ")
    },
    .groups = "drop"
  )

输出结果

完全符合你的预期输出格式:

# A tibble: 4 × 3
  name  Utt   increase_size
  <chr> <chr> <chr>        
1 A     ah    3.2          
2 A     oh    1.5, 3.5     
3 B     ah    3.9          
4 B     oh    NA           

方案优势

  • 无需生成多余中间列,也不需要多次拆分分组,逻辑更紧凑
  • 天然保留所有name+Utt的分组组合,无需后续补全缺失分组
  • 如果你习惯使用data.table的rleid,直接替换代码中的consecutive_id即可,运行效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:45:06