首页 > 解决方案 > 使用 dplyr 根据另一个数据表中的值提取一组值

问题描述

想象一下,我有一个类似于下面的大表(table1)。

表格1:

YEAR     MODEL    MAKE      ORDERCODE  COLOR

2001      BMW     328i      FAE        GREEN
2001      BMW     328i      SDC        BLACK
2001      LEXUS   LS430     ASD        PURPLE
2001      LEXUS   IS300     ASD        BLACK
2001      LEXUS   GS300h    YUK        BLACK
2001      LEXUS   GS300h    HNY        BLUE
2002      LEXUS   GS300h    ASF        PURPLE
2002      LEXUS   GS300h    FAS        BROWN
2002      LEXUS   GS300h    YUI        RED
2002      LEXUS   IS250d    ZXC        ORANGE
2002      LEXUS   IS250d    ASE        BLUE

我有另一个有另一个品牌的数据框(假设它是一个雅阁,有黑色、蓝色、紫色和红色),所以它看起来像这样:

表 2:

MAKE     COLOR
Accord   BLACK
Accord   RED
Accord   BLUE
Accord   PURPLE    

我正在尝试查找表 1 中具有表 2 中所有颜色的所有汽车。我已经尝试使用 dplyr table1 %>% filter(COLOR %in% table2$COLOR),但是我返回了任何至少具有我正在寻找的给定颜色之一的行。我想返回具有我指定颜色的汽车制造的行。所以我的结果是这样的:

期望的结果:

2001      LEXUS   GS300h    YUK        BLACK
2001      LEXUS   GS300h    HNY        BLUE
2002      LEXUS   GS300h    ASF        PURPLE
2002      LEXUS   GS300h    FAS        BROWN
2002      LEXUS   GS300h    YUI        RED

标签: rdplyrdata.table

解决方案


这是使用的解决方案dplyr

library(dplyr)

df1 %>%
  group_by(MODEL, MAKE) %>%
  mutate(COLOR2 = ifelse(COLOR %in% df2$COLOR, COLOR, NA),
         count = n_distinct(COLOR2[!is.na(COLOR2)])) %>%
  filter(count == nrow(df2)) %>%
  select(-COLOR2, -count)

结果:

# A tibble: 5 x 5
# Groups:   MODEL, MAKE [1]
   YEAR MODEL   MAKE ORDERCODE  COLOR
  <int> <chr>  <chr>     <chr>  <chr>
1  2001 LEXUS GS300h       YUK  BLACK
2  2001 LEXUS GS300h       HNY   BLUE
3  2002 LEXUS GS300h       ASF PURPLE
4  2002 LEXUS GS300h       FAS  BROWN
5  2002 LEXUS GS300h       YUI    RED

推荐阅读