r按组条件删除行

ffscu2ro  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(158)

这是我的数据集:

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属于重复多次的组的情况下删除这些行。
例如,组=红色和黄色有2行,我想去掉这两个组中状态=否的行。最终的数据集如下所示。

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

对此提出任何建议,不胜感激。

kiayqfof

kiayqfof1#

如果组中的行数大于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' > '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))

相关问题