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

基于重复代码关联事件的R语言分组ID生成需求

解决基于event和code关联生成分组ID的问题

思路说明

这个问题核心是识别通过code关联的event连通组:只要两个event共享任意一个code,它们就属于同一组,组内所有event对应的行将共用同一个group_id。我们可以借助图论中的「连通分量」概念来实现,具体步骤如下:

代码实现

先加载所需R包(未安装的话先运行install.packages(c("dplyr", "tidyr", "igraph", "purrr"))):

library(dplyr)
library(tidyr)
library(igraph)
library(purrr)

处理原始数据并生成目标group_id:

# 原始数据集
data <- data.frame(
  event = c("1", "1", "2", "2", "3", "3", "3"),
  code = c("64 2 16 204", "64 204", "70 2 05 002", "70 002", "60 1 15 001","64 2 16 204", "60 1 15 076")
)

# 1. 整理每个code对应的唯一event集合
code_event_map <- data %>%
  distinct(event, code) %>%
  group_by(code) %>%
  summarise(events = list(event)) %>%
  ungroup()

# 2. 生成event间的关联边:同一code下的event两两建立连接
edges <- code_event_map %>%
  mutate(edges = map(events, ~combn(.x, 2, simplify = FALSE))) %>%
  unnest(edges) %>%
  unnest_wider(edges, names_sep = "_") %>%
  select(edge1 = edges_1, edge2 = edges_2)

# 3. 构建图结构并提取连通分量
graph <- graph_from_data_frame(edges, directed = FALSE)
component_info <- components(graph)

# 4. 为每个event分配对应的group_id
event_group <- tibble(
  event = names(component_info$membership),
  group_id = as.character(component_info$membership)
)

# 5. 将group_id合并回原始数据集
result <- data %>%
  left_join(event_group, by = "event")

# 查看最终结果
print(result)

输出结果

运行代码后将得到你期望的输出:

event          code group_id
1     1 64 2 16 204        1
2     1      64 204        1
3     2 70 2 05 002        2
4     2      70 002        2
5     3 60 1 15 001        1
6     3 64 2 16 204        1
7     3 60 1 15 076        1

补充说明

  • 该方法支持多层级关联:比如event1和2共享codeA,event2和3共享codeB,会自动将1、2、3归为同一组
  • 用distinct(event, code)避免重复处理同一event-code组合,保证关联关系的准确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:15:54