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

如何基于分组列查找另一列中的连续重复值(R语言实现)

R实现分组内及相邻分组间连续重复记录标记

核心思路

通过lag()函数获取上一行的分组和目标值,判断两种连续重复场景:

  1. 同一分组内,当前行与上一行值重复
  2. 相邻分组(分组按顺序递增),当前行与上一行值重复

代码实现

首先加载tidyverse工具包(适合初学者的语法风格),先构造模拟数据,再处理:

library(tidyverse)

# 模拟你的数据结构(替换成你实际的数据集)
df <- tibble(
  group = c(1,1,1,2,2,3,3,3),
  value = c("A","A","B","B","C","C","C","D")
)

# 处理连续重复标记
df_processed <- df %>%
  # 确保数据按分组顺序排列(如果有其他排序维度,比如时间,添加到arrange里)
  arrange(group) %>%
  mutate(
    # 获取上一行的分组和值
    prev_group = lag(group),
    prev_value = lag(value),
    # 判断连续条件
    标记 = case_when(
      # 同一分组内连续重复
      group == prev_group & value == prev_value ~ "连续",
      # 相邻分组间连续重复(分组为连续递增整数时适用)
      group == prev_group + 1 & value == prev_value ~ "连续",
      # 其他情况标记为非连续
      TRUE ~ "非连续"
    )
  ) %>%
  # 移除辅助列(可选)
  select(-prev_group, -prev_value)

# 查看结果
print(df_processed)

适配不同分组类型

如果你的分组是字符型(比如"组1"、"组2"),先将分组转换为可比较的顺序值:

df_processed <- df %>%
  # 自定义分组顺序,替换成你实际的分组名称
  mutate(group_order = as.integer(factor(group, levels = c("组1", "组2", "组3")))) %>%
  arrange(group_order) %>%
  mutate(
    prev_group_order = lag(group_order),
    prev_value = lag(value),
    标记 = case_when(
      group_order == prev_group_order & value == prev_value ~ "连续",
      group_order == prev_group_order + 1 & value == prev_value ~ "连续",
      TRUE ~ "非连续"
    )
  ) %>%
  select(-group_order, -prev_group_order, -prev_value)

说明

  • 第一行因无前置行,会被标记为"非连续",符合逻辑
  • 如果数据有固定的排序规则(比如时间戳、行号),一定要在arrange()中指定,保证连续判断的准确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:16:05