R语言基于两列重复值创建唯一ID新列处理重复数据
R 按分组生成自定义name列的dplyr实现
数据已经提前按调研时间排好序,不需要复杂的重复值标记,直接按subject_id和day分组后给组内行按顺序编号,再拼接对应取值就行,全程只用dplyr就能完成。
代码实现
library(dplyr) df <- df %>% group_by(subject_id, day) %>% mutate( # 组内按现有行顺序生成序号,对应调研先后次序 group_seq = row_number(), name = case_when( group_seq == 1 ~ as.character(day), TRUE ~ paste0(day, " -", group_seq) ) ) %>% ungroup() %>% select(-group_seq)
结果说明
用给出的重复样例跑出来的结果完全匹配要求:
- subject_id=01、day=1的两条记录,name分别为
"1"和"1 -2" - 其余无重复的记录,name直接取对应day的字符值
适配边界场景
- 后续如果遇到同个受试者同一天填了3次及以上调研的情况,代码会自动生成
"1 -3"、"1 -4"格式的取值,不需要额外修改 - 如果需要统一给所有值加序号后缀(第一条显示为
"1 -1"),直接把name的生成逻辑改成paste0(day, " -", group_seq)即可,符合提到的可接受带-1后缀的要求
内容的提问来源于stack exchange,提问作者user6387185
相关产品推荐
相关产品推荐

