r - 使用 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
解决方案
这是使用的解决方案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
推荐阅读
- flutter - 为什么这个闪屏代码不能正常工作?
- python - Python中3维Numpy ndarray中的高级索引
- for-loop - 批量将子文件夹中的所有文件复制到目标位置,而无需重新创建子文件夹
- python - discord.py 挂起连接到语音 heroku
- r - 从 matchPattern 中提取值
- linux - IPv6 示例程序在 connect() 上失败
- android - 从活动传递到片段时为空包
- python - 当我在 Django 中运行我的服务器时,我得到模板不存在
- racket - 在球拍中编写嵌套的while循环
- c++ - 用于装箱和拆箱的 C++ 类