使用dplyr的多条件筛选联接

使用dplyr的多条件筛选联接,r,dplyr,dbplyr,R,Dplyr,Dbplyr,我试图通过创建一个名为event\u f的df来完成下面描述的操作 我想从细节df中,将类型id==6的所有事件id作为筛选标准,不包括组合为6和3或6和7的事件id 请注意,可以有其他组合,但它们都将包括在内 库(tidyverse) #>警告:程序包“tidyverse”是在R版本3.5.3下构建的 #>警告:包“purrr”是在R版本3.5.3下生成的 事件我想你需要 library(dplyr) event %>% semi_join(detail %>%

我试图通过创建一个名为
event\u f
df
来完成下面描述的操作

我想从
细节
df
中,将
类型id==6的所有
事件id
作为筛选标准,不包括组合为6和3或6和7的事件id

请注意,可以有其他组合,但它们都将包括在内

库(tidyverse)
#>警告:程序包“tidyverse”是在R版本3.5.3下构建的
#>警告:包“purrr”是在R版本3.5.3下生成的
事件我想你需要

library(dplyr)

event %>%
   semi_join(detail %>%
               group_by(event_id) %>%
               filter(any(type_id == 6) & all(!type_id %in% c(3, 7))),
    by = c("id" = "event_id"))

# id    type_id
# <chr> <chr>  
#1 00_6  B     
库(dplyr)
事件%>%
半无缝连接(详图%>%
分组依据(事件id)%>%
筛选器(任意(type_id==6)和所有(!type_id%in%c(3,7)),
by=c(“id”=“事件id”))
#id类型\u id
#    
#100_6 B
当我们试图为那些满足标准的
类型id
找出
事件id
时,我们需要
事件id
分组。如果我们不按
分组,则过滤条件将应用于整个数据帧,因为数据帧中的值为3和7,因此将返回0行

我想你需要

library(dplyr)

event %>%
   semi_join(detail %>%
               group_by(event_id) %>%
               filter(any(type_id == 6) & all(!type_id %in% c(3, 7))),
    by = c("id" = "event_id"))

# id    type_id
# <chr> <chr>  
#1 00_6  B     
库(dplyr)
事件%>%
半无缝连接(详图%>%
分组依据(事件id)%>%
筛选器(任意(type_id==6)和所有(!type_id%in%c(3,7)),
by=c(“id”=“事件id”))
#id类型\u id
#    
#100_6 B

当我们试图为那些满足标准的
类型id
找出
事件id
时,我们需要
事件id
分组。如果我们不按
分组,则过滤条件将应用于整个数据帧,因为数据帧中的值为3和7,因此将返回0行

太好了,谢谢。你能解释一下为什么你需要这里的
群组吗?@MattnDo用一些解释更新了答案。太好了,谢谢。你介意解释一下为什么你需要这里的
分组吗?@MattnDo用一些解释更新了答案。