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

如何用dplyr基于组内全部值关联两个数据框?

按分组全匹配关联数据框的解决方案

需求说明

需要实现:当xData中某一id对应的所有value集合,与yData中某一grouping_value对应的所有value集合完全一致时,将该grouping_value赋值给该id的所有行,最终得到目标结果exptdOutcome。

示例数据

library(tidyverse)

xData <- 
  tibble(
    id = rep(c(1:3), each = 3),
    value = c("A", "B", "C", "A", "D", "E", "A", "B", "C"),
  )

yData <- 
  tibble(
    value = c("A", "B", "C", "A", "D", "E"),
    grouping_value = rep(c("a","b"), each = 3),
  )

# 预期输出
exptdOutcome <- xData %>% mutate(grouping_value = rep(c("a","b","a"), each = 3))

解决方案代码

# 1. 预处理yData:提取每个grouping_value对应的有序value集合
y_group_sets <- yData %>%
  group_by(grouping_value) %>%
  summarise(value_set = list(sort(value))) %>%
  ungroup()

# 2. 匹配xData的id分组与yData的grouping_value分组
final_result <- xData %>%
  group_by(id) %>%
  mutate(value_set = list(sort(value))) %>%
  left_join(y_group_sets, by = "value_set") %>%
  select(-value_set) %>%
  ungroup()

# 验证结果与预期一致
all.equal(final_result, exptdOutcome)

逻辑解释

  • 对yData按grouping_value分组后,将每组的value排序并转为列表:排序是为了消除value顺序对集合匹配的影响(比如A,B,C和C,B,A属于同一集合)
  • 对xData按id分组,生成每组有序的value集合列表
  • 通过value_set列表列进行连接,自动匹配到每个id对应的grouping_value
  • 最后移除辅助列value_set,得到符合要求的结果

内容的提问来源于stack exchange,提问作者Rich.a.rd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:12:55