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

使用dplyr基于另一数据表提取满足全部指定颜色的车辆数据

解决方法:筛选覆盖全部指定颜色的品牌的所有行

你之前用的filter(COLOR %in% table2$COLOR)确实只能拿到至少包含一个目标颜色的行,但我们需要的是整个品牌拥有table2里所有指定颜色的所有行——哪怕某一行的颜色不在目标集合里,只要它所属的品牌覆盖了全部目标颜色,就应该被保留。

下面是用dplyr实现的完整步骤:

步骤1:明确目标颜色集合

首先从table2中提取所有需要的颜色(去重,避免重复值干扰):

target_colors <- unique(table2$COLOR)
# 这里得到的是 c("BLACK", "RED", "BLUE", "PURPLE")

步骤2:筛选符合条件的品牌

我们需要找出那些颜色集合包含所有target_colors的品牌:

library(dplyr)

qualified_makes <- table1 %>%
  group_by(MAKE) %>%
  # 检查当前品牌的所有颜色是否覆盖了全部目标颜色
  summarise(has_all_colors = all(target_colors %in% COLOR), .groups = "drop") %>%
  # 只保留符合条件的品牌
  filter(has_all_colors) %>%
  # 提取品牌名称作为筛选器
  pull(MAKE)

步骤3:提取符合条件品牌的所有行

用上面得到的品牌列表,过滤table1的所有行:

result <- table1 %>%
  filter(MAKE %in% qualified_makes)

运行后得到的结果就是你想要的:

YEAR    MODEL  MAKE ORDERCODE  COLOR
1 2001 GS300h LEXUS       YUK  BLACK
2 2001 GS300h LEXUS       HNY   BLUE
3 2002 GS300h LEXUS       ASF PURPLE
4 2002 GS300h LEXUS       FAS  BROWN
5 2002 GS300h LEXUS       YUI    RED

为什么这个方法可行?

  • all(target_colors %in% COLOR)会检查目标颜色的每一个值,是否都存在于当前品牌的颜色集合中,只有全部满足时,该品牌才会被选中。
  • 最后筛选的是品牌而非颜色,所以即使某行的颜色不在目标集合里(比如例子中的BROWN),只要它所属的品牌符合条件,就会被保留下来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:45:07