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

R语言按分组统计从指定值起始的连续序列长度

R实现按分组统计指定起始值的连续递增序列长度

实现思路

对每个分组的数值列执行以下逻辑:

  1. 查找指定起始值第一次出现的位置,未找到直接返回0
  2. 从起始位置开始向后遍历,统计连续满足「当前值 = 前一个值 +1」的元素个数,出现不满足的情况立即终止统计
  3. 返回统计的长度作为该分组的结果

代码实现

首先自定义核心统计函数:

get_consecutive_run <- function(x, start_val) {
  # 定位起始值第一次出现的位置
  start_pos <- which(x == start_val)[1]
  if (is.na(start_pos)) return(0)
  
  # 截取从起始位置开始的子序列
  sub_vec <- x[start_pos:length(x)]
  # 判断相邻元素是否满足+1的递增要求
  diff_valid <- c(TRUE, diff(sub_vec) == 1)
  # 定位第一个不满足的位置,计算有效长度
  break_pos <- which(!diff_valid)[1]
  return(ifelse(is.na(break_pos), length(sub_vec), break_pos - 1))
}

tidyverse方案(推荐,写法简洁易读)

加载dplyr后分组调用函数即可:

library(dplyr)

# 起始值为1的统计结果
input.df %>%
  group_by(names) %>%
  summarise(runs = get_consecutive_run(goals, start_val = 1)) %>%
  ungroup()

# 起始值为3的统计结果
input.df %>%
  group_by(names) %>%
  summarise(runs = get_consecutive_run(goals, start_val = 3)) %>%
  ungroup()

基础R方案(无需额外依赖包)

使用aggregate函数分组统计:

# 起始值为1的统计结果
aggregate(goals ~ names, input.df, FUN = \(x) get_consecutive_run(x, 1))

# 起始值为3的统计结果
aggregate(goals ~ names, input.df, FUN = \(x) get_consecutive_run(x, 3))

输出验证

两种方案的运行结果和示例预期输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:27:02