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

基于公共元素分组 将向量合并为排序字符串的R语言技术问询

解决思路与代码实现

问题本质

这是典型的连通分量识别问题:两列中存在关联(同一行的两个元素,或通过其他元素间接关联)的元素属于同一个分组,我们可以借助图论工具高效识别这些分组,再完成合并排序。

实现步骤与代码

1. 加载依赖包

需要用到tidyverse处理数据,igraph处理图结构:

install.packages(c("tidyverse", "igraph"))
library(tidyverse)
library(igraph)

2. 原始输入数据

df <- tibble::tribble(
  ~col1, ~col2,
  "a", "b",
  "b","c",
  "c","b",
  "d",NA,
  "e","d",
  "f","d",
  "g","d",
  "h","i",
  "i","h",
  "j", NA
)

3. 提取边并构建图

去掉包含NA的行(无连接关系),用有效行作为图的边创建无向图,识别连通分量:

# 提取有效边数据
edges <- df %>% filter(!is.na(col2)) %>% select(col1, col2)

# 创建无向图并获取连通分量信息
graph <- graph_from_data_frame(edges, directed = FALSE)
component_info <- components(graph)

4. 分配元素到对应分组

收集所有出现过的元素,给每个元素分配分组ID:属于连通分量的用组件ID,无关联的单独元素分配新ID:

# 收集所有唯一元素(剔除NA)
all_elements <- df %>% 
  pivot_longer(cols = everything(), values_to = "element") %>% 
  filter(!is.na(element)) %>% 
  pull(element) %>% 
  unique()

# 为每个元素分配分组ID
element_groups <- tibble(element = all_elements) %>%
  mutate(group_id = case_when(
    element %in% names(component_info$membership) ~ component_info$membership[element],
    TRUE ~ max(component_info$membership) + row_number()
  ))

5. 分组合并排序

对每个分组的元素排序后,用下划线连接成字符串:

# 生成最终结果
result <- element_groups %>%
  group_by(group_id) %>%
  summarize(result = str_c(sort(element), collapse = "_")) %>%
  select(result)

# 查看结果
print(result)

输出结果

运行后得到的结果与期望完全一致:

# A tibble: 4 × 1
  result   
  <chr>    
1 a_b_c    
2 d_e_f_g  
3 h_i      
4 j        

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:30:44