【问题标题】:Filter "either" "or" with dplyr使用 dplyr 过滤“或者”“或”
【发布时间】:2021-02-22 17:33:30
【问题描述】:

我有一个如下所示的 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

我想对 dplyr 说,请 group_by "team" 并过滤每个包含名称 "LT" 的团队的行。如果团队不包含名称“LT”,则过滤名称为“CH”。

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

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

非常感谢任何帮助

【问题讨论】:

    标签: r dataframe dplyr tidyverse


    【解决方案1】:

    一个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 
    

    【讨论】:

      【解决方案2】:

      我们可以先arrangefilter根据'name'中的first值在'team'分组后进行

      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))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-08
        • 1970-01-01
        • 1970-01-01
        • 2017-08-19
        • 1970-01-01
        • 2017-06-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多