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

如何使用dplyr基于另一数据框按分组匹配规则过滤数据框

实现方案

你这个需求本质是按comp_name分组后,判断每个记录的model值是否落在对应组的目标值集合里,两种常用tidyverse写法都能实现:

方法1:拆分嵌套列后做内连接(推荐,性能更好)

wanted_model_dat里的wanted_model是列表型列,先把嵌套的向量拆成独立行,再和原数据做键值匹配的内连接即可,逻辑直白不容易出边界问题:

library(tidyverse)

res <- wanted_model_dat %>%
  # 把列表列里的向量拆成逐行的单个值
  unnest_longer(wanted_model) %>%
  # 按comp_name+模型值匹配,只保留两边都存在的记录
  inner_join(dat, by = c("comp_name", "wanted_model" = "model")) %>%
  # 调整列名和列顺序和预期结果对齐
  select(comp_name, model = wanted_model, status)

运行后得到的结果和你给出的预期输出完全一致:

# A tibble: 3 × 3
  comp_name model status
  <chr>     <dbl> <chr> 
1 foo           2 B     
2 foo          11 C     
3 bar           0 X     

方法2:行式判断筛选

如果不想拆分匹配表,也可以连接后逐行判断model是否在对应组的目标向量里:

res2 <- dat %>%
  left_join(wanted_model_dat, by = "comp_name") %>%
  # 逐行判断model是否属于当前行的wanted_model向量
  filter(map2_lgl(model, wanted_model, ~ .x %in% .y)) %>%
  select(-wanted_model)

两种写法输出结果完全相同,数据量较大时优先选第一种拆表连接的写法,运行效率更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:57:19