【问题标题】:r conditional drop rows by Groupr 按组有条件地删除行
【发布时间】:2021-11-25 10:50:06
【问题描述】:

这是我的数据集

   Group     Status      From    To
   Blue      No          1994    2000
   Red       No          1994    1997
   Red       Yes         1998    2002
   Yellow    No          1994    2014
   Yellow    Yes         2015    2021
   Purple    No          1994    1997

我喜欢删除带有Status=No 的行,仅当它们属于重复多次的组时。

例如。 Group=Red 和 Yellow 有 2 行,我喜欢去掉这两个组中 Status=No 的行。最终的数据集是这样的。

   Group     Status      From    To
   Blue      No          1994    2000
   Red       Yes         1998    2002
   Yellow    Yes         2015    2021
   Purple    No          1994    1997

对此有任何建议。谢谢。

【问题讨论】:

    标签: r dplyr subset


    【解决方案1】:

    如果组中的行数大于 1,您可以使用 Status = 'Yes' 返回行。

    library(dplyr)
    
    df %>% 
      group_by(Group) %>% 
      filter(if(n() > 1) Status == 'Yes' else TRUE) %>%
      ungroup
    
    #  Group  Status  From    To
    #  <chr>  <chr>  <int> <int>
    #1 Blue   No      1994  2000
    #2 Red    Yes     1998  2002
    #3 Yellow Yes     2015  2021
    #4 Purple No      1994  1997
    

    对于这个数据,既然'Yes' &gt; 'No'我们也可以做-

    df %>%
      arrange(Group, desc(Status)) %>%
      distinct(Group, .keep_all = TRUE)
    

    数据

    如果您在reproducible format 中提供数据会更容易提供帮助

    df <- structure(list(Group = c("Blue", "Red", "Red", "Yellow", "Yellow", 
    "Purple"), Status = c("No", "No", "Yes", "No", "Yes", "No"), 
        From = c(1994L, 1994L, 1998L, 1994L, 2015L, 1994L), To = c(2000L, 
        1997L, 2002L, 2014L, 2021L, 1997L)), 
       class = "data.frame", row.names = c(NA, -6L))
    

    【讨论】:

      猜你喜欢
      • 2021-12-11
      • 2021-03-08
      • 2012-06-05
      • 2015-08-31
      • 2021-06-09
      • 2016-12-02
      • 2014-05-04
      • 2020-08-11
      • 1970-01-01
      相关资源
      最近更新 更多