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

如何按group列分组重命名id列的重复值?

按Group分组重命名重复ID的实现方法

问题背景

现有如下数据集,其中同一id会出现在不同group中:

df <- read.table(text='id   group  
 1         A 
 2         A 
 2         A 
 1         B 
 1         B 
 2         B
 2         C
 2         C 
 1         C 
 2         D         
 1         D
 1         D', header=TRUE)

需要按group列分组,对id列的重复值进行重命名,预期输出如下:

id  group
    1     A
    2     A
    2     A
    1_2   B
    1_2   B
    2_2   B
    2_3   C
    2_3   C
    1_3   C
    2_4   D
    1_4   D
    1_4   D

实现方案

可以通过dplyr包的分组、排序和拼接操作实现,具体代码如下:

# 加载dplyr包
library(dplyr)

# 处理数据
df_processed <- df %>%
  # 去重得到每个id对应的group集合
  distinct(id, group) %>%
  # 按id分组,给每个group分配顺序编号
  group_by(id) %>%
  mutate(seq = row_number()) %>%
  ungroup() %>%
  # 将顺序编号合并回原始数据集
  right_join(df, by = c("id", "group")) %>%
  # 生成新的id列:seq=1时用原id,否则拼接id和seq
  mutate(new_id = ifelse(seq == 1, as.character(id), paste(id, seq, sep = "_"))) %>%
  # 调整列顺序并重命名
  select(new_id, group) %>%
  rename(id = new_id)

# 查看结果
print(df_processed)

代码逻辑说明:

  • 先对每个id的group去重,确定每个id对应的group出现顺序并分配序号
  • 将序号合并回原数据集,根据序号判断是否需要拼接id和序号:第一个出现的group保留原id,后续group则拼接成id_序号的格式
  • 最后调整列顺序并完成重命名,得到符合预期的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:40:07