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

基于object_id拆分group_id并生成递增subgroup_id的实现方法

生成全局递增的subgroup_id解决方案

需求说明

  • 数据以id唯一标识,按sub_id和group_id分组
  • 需生成subgroup_id列:
    • 同一group_id内不同object_id对应不同的subgroup_id
    • subgroup_id为全局无限递增序列
    • 每个subgroup_id仅属于一个group_id

原始数据

library(tidyverse)

df <- tibble(id = c(1:11),
             sub_id = c(1,2,1,2,3,4,3,4,5,6,6),
             group_id = c(rep(1,4),rep(3,4),5,6,6),
             object_id = c(1,1,2,2,2,2,3,3,2,2,3))

期望输出

# A tibble: 11 × 5
      id sub_id group_id subgroup_id object_id
   <int>  <dbl>    <dbl>       <dbl>     <dbl>
 1     1      1        1           1         1
 2     2      2        1           1         1
 3     3      1        1           2         2
 4     4      2        1           2         2
 5     5      3        3           3         2
 6     6      4        3           3         2
 7     7      3        3           4         3
 8     8      4        3           4         3
 9     9      5        5           5         2
10    10      6        6           6         2
11    11      6        6           7         3

实现代码

利用dplyr的分组功能和cur_group_id()函数,直接为每个group_id与object_id的唯一组合分配全局递增的序号:

df_processed <- df %>%
  group_by(group_id, object_id) %>%
  mutate(subgroup_id = cur_group_id()) %>%
  ungroup()

# 查看结果
print(df_processed)

代码说明

  • group_by(group_id, object_id):按group_id和object_id的唯一组合分组,确保同一组合内的行共享同一个subgroup_id
  • cur_group_id():为每个唯一分组分配一个全局递增的整数ID,顺序与分组在数据中首次出现的顺序一致
  • ungroup():取消分组状态,恢复普通数据框格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:54:27