You need to enable JavaScript to run this app. R语言嵌套分组下连续段顺序编号与组段长度统计实现
优惠活动
大模型
产品
解决方案
定价
更多

R语言嵌套分组下连续段顺序编号与组段长度统计实现

Markdown 排版规范
  • 标题使用 # 号标识层级
  • 列表项以短横线 - 开头
  • 需要强调的文本使用星号 * 包裹
  • 代码或命令使用反引号 ` 包裹
  • 引用类文本使用大于号 > 开头
  • 链接的标准格式为 [显示文本](目标URL)
  • 图片的标准格式为 ![替代文本](图片URL)
适配需求的基础包实现方案

核心思路:用R基础包内置的rle(游程编码)识别每个sample分组内的连续同region片段,基于连续段生成顺序编号与段长度统计,全程无第三方包依赖。

实现逻辑

  • 原尝试代码按sample + region分组,会将同一sample下被其他值打断的同region记录合并为一组,导致编号无法在序列中断时重置
  • 方案调整分组粒度为sample内部的连续同region段,通过游程编码自动识别连续同值段,为每个段生成唯一标识后,再计算段内序号和段长

完整可运行代码

# 读入原始测试数据集
df <- read.table(text = "sample time region
a   10  S1
a   11  S1
a   12  S1
a   13  S3.2
a   14  S3.1
a   15  S3.2
a   16  S3.2
a   17  S3.1
a   18  S9.2
a   19  S9.2
a   20  S9.2
a   21  S9.2
a   22  S9.2
a   23  S3.2
a   24  S3.2
a   25  S3.2
a   26  S3.1
b   3   S9.2
b   4   S9.2
b   5   S9.2
b   6   S3.2
b   7   S3.2
b   8   S9.2", header = TRUE)
# 步骤1:为每个sample内的连续同region段生成唯一标识
df$seg_id <- ave(
  df$region,
  df$sample,
  FUN = function(reg) {
    # 对当前sample的region序列做游程编码
    rle_res <- rle(as.character(reg))
    # 按各段长度重复段序号,得到逐行对应的段ID
    rep(seq_along(rle_res$lengths), times = rle_res$lengths)
  }
)
# 步骤2:计算每个连续段内的顺序编号
df$seq <- ave(
  df$time,
  df$sample, df$seg_id,
  FUN = seq_along
)
# 步骤3:统计每个连续段的总记录数
df$length <- ave(
  df$time,
  df$sample, df$seg_id,
  FUN = length
)
# 可选:移除辅助计算列seg_id
df$seg_id <- NULL

结果校验

运行代码后生成的数据集与给定的期望输出完全一致,可通过identical(df, result)做一致性验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 01:36:07