“过滤器”;或&引用;或;用dplyr

“过滤器”;或&引用;或;用dplyr,r,dataframe,dplyr,tidyverse,R,Dataframe,Dplyr,Tidyverse,我有一个像这样的data.frame dat1=data.frame(time=c(1,2,1,2,1,2,1,2), team=c("A","A","A","A","B","B","C","C"), name=c("LT","LT","CH","CH",&q

我有一个像这样的data.frame

dat1=data.frame(time=c(1,2,1,2,1,2,1,2), team=c("A","A","A","A","B","B","C","C"), name=c("LT","LT","CH","CH","CH","CH","AT","AT"))

time team name
 1    A     LT
 2    A     LT
 1    A     CH
 2    A     CH
 1    B     CH
 2    B     CH
 1    C     AT
 2    C     AT

time team name
 1    A     LT
 2    A     LT
 1    B     CH
 2    B     CH

我想对dplyr说,请按“团队”将_分组,并过滤包含名称“LT”的每个团队的行。如果团队不包含名称“LT”,则在名称“CH”中进行筛选

我希望我的data.frame看起来像这样

dat1=data.frame(time=c(1,2,1,2,1,2,1,2), team=c("A","A","A","A","B","B","C","C"), name=c("LT","LT","CH","CH","CH","CH","AT","AT"))

time team name
 1    A     LT
 2    A     LT
 1    A     CH
 2    A     CH
 1    B     CH
 2    B     CH
 1    C     AT
 2    C     AT

time team name
 1    A     LT
 2    A     LT
 1    B     CH
 2    B     CH


非常感谢您的帮助

一个
dplyr
选项可以是:

dat1 %>%
 group_by(team) %>%
 filter(if(any(name == "LT")) name == "LT" else name == "CH")

   time team  name 
  <dbl> <fct> <fct>
1     1 A     LT   
2     2 A     LT   
3     1 B     CH   
4     2 B     CH 
dat1%>%
组别(组别)%>%
过滤器(如果有(名称==“LT”))名称==“LT”其他名称==“CH”)
时间团队名称
1 A LT
2 A LT
3.1 B CH
4.2 B CH

我们可以在按“团队”分组后,根据“名称”中的
first
值,先
排列
,然后
过滤

library(dplyr)
dat1 %>% 
     filter(name %in% c("LT", "CH")) %>% 
     arrange(team, ordered(name, levels = c('LT', 'CH'))) %>% 
     group_by(team) %>%
     filter(name %in% first(name))