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

使用tidyverse对group_by生成的分组求多组间feature交集

解决方案

你遇到的错误核心原因有两点:

  1. group_by() 后的mutate()是分组内独立运算,每次只能拿到当前分组的feature向量,无法访问其他分组的元素,自然无法求跨组交集
  2. 基础intersect()函数仅支持传入两个向量求交集,单参数调用必然报错

实现代码

library(tidyverse)

# 示例数据生成(加随机种子方便结果复现)
set.seed(123)
data <- tibble(
  feature = paste0("Group_", sample(1:800, 1000, replace = T)),
  classifier = paste0("Classifier_", sample(1:3, 1000, replace = T))
)

# 求所有classifier分组的共有feature
common_features <- data %>%
  # 先去重,避免同分组内重复feature干扰结果
  distinct(classifier, feature) %>%
  # 按classifier分组,将每个分组的feature汇总为列表
  group_by(classifier) %>%
  summarise(feature_set = list(feature)) %>%
  # 提取所有分组的feature列表
  pull(feature_set) %>%
  # 迭代对所有列表元素求交集,支持任意数量分组
  Reduce(intersect, .)

运行后common_features就是所有分组共有的feature值。如果需要把交集标记回原数据,可以补充以下代码:

data <- data %>%
  mutate(is_common = feature %in% common_features)

原理说明

  • Reduce()函数可以将指定函数(这里是intersect)迭代作用到列表的所有元素上,完美解决intersect只能接收两个参数的问题,同时支持任意数量的分组,无需手动调整参数
  • 提前用distinct()去重可以减少无效运算,也避免同分组内重复值影响交集判断

内容的提问来源于stack exchange,提问作者sarah-lital

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:24:04