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

基于dplyr实现分组成员ID的混合分配(同组同/异ID)

分组成员ID分配(dplyr实现)

需求说明

  • 指定部分组(如示例中的Group2):组内每个成员分配独立的全局唯一ID
  • 其余组:组内所有成员共用同一个全局唯一ID

原始数据

data <- data.frame(
  Group = c("Group1", "Group1", "Group2", "Group2", "Group2", "Group3", "Group3", "Group4", "Group4", "Group4"),
  Member = c("Alice", "Bob", "Charlie", "David", "Eve", "Frank", "Grace", "Helen", "Ivy", "John")
)

目标效果

data <- data.frame(
  Group = c("Group1", "Group1", "Group2", "Group2", "Group2", "Group3", "Group3", "Group4", "Group4", "Group4"),
  Member = c("Alice", "Bob", "Charlie", "David", "Eve", "Frank", "Grace", "Helen", "Ivy", "John"),
  ID = c(1,1,2,3,4,5,5,6,6,6)
)

解决方案代码

使用dplyr的mutate()结合case_when()实现,可手动指定需要独立ID的组:

library(dplyr)

# 手动指定需要分配独立ID的组
independent_groups <- c("Group2")

data_with_id <- data %>%
  mutate(
    # 给每个组分配连续的全局基础ID
    group_base_id = dense_rank(Group),
    ID = case_when(
      # 指定组内成员:用组基础ID + 组内行号-1生成独立唯一ID
      Group %in% independent_groups ~ group_base_id + row_number() - 1,
      # 其余组直接复用组基础ID
      TRUE ~ group_base_id
    )
  ) %>%
  # 移除中间辅助列(可选操作)
  select(-group_base_id)

代码逻辑解释

  1. dense_rank(Group):为每个不同的组分配连续的全局唯一组ID(如Group1=1、Group2=2、Group3=3、Group4=4)
  2. case_when()分支处理:
    • 属于指定独立组的成员,通过组基础ID叠加组内行号偏移量,生成组内唯一的全局ID
    • 非指定组的成员直接使用组基础ID,实现组内ID统一
  3. 可选移除辅助列group_base_id,得到最终目标数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:02:27