如何通过使用过滤器从组中删除值?

时间:2019-01-07 22:42:30

标签: r filter dplyr

这是数据:

ID  Group   test
11  1   test1
11  2   test1
11  2   test2
12  1   test1
12  2   test1

如果一个小组进行了两次测试,我只想保留test2。 如果一个小组仅进行了一项测试,我将保留该测试。

例如,在这里,我要删除组2中ID为11的test1

我尝试了以下代码:

data %>%group_by(ID, Group) %>%filter(test == "test2")

但是它不能很好地工作,因为所有test1将被删除。

1 个答案:

答案 0 :(得分:1)

这是一种可能性:添加一个辅助变量,用于计算组中的测试数量。

(data 
      %>% group_by(ID, Group) 
      %>% mutate(n=n()) 
      %>% filter(n==1 | test=="test2")
)

(如果您想摆脱该变量,可以select(-n)之后使用)。

实际上(经过进一步的实验),您似乎可以即时使用n()

(data 
     %>% group_by(ID, Group) 
     %>% filter(n()==1 | test=="test2")
)