如何基于分组列查找另一列中的连续重复值(R语言实现)
R实现分组内及相邻分组间连续重复记录标记
核心思路
通过lag()函数获取上一行的分组和目标值,判断两种连续重复场景:
- 同一分组内,当前行与上一行值重复
- 相邻分组(分组按顺序递增),当前行与上一行值重复
代码实现
首先加载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
相关产品推荐
相关产品推荐

