过滤一组内的数据帧,其中一列满足 R 中的 AND 条件

Aar*_*ron 0 r subset filter dplyr

我有以下数据框,我只需要过滤那些每组(id)同时具有“摄入”和“排出”的行。结果应该是这样的:

> df <- tibble(id = c(1, 1, 2, 3, 3, 4, 4, 5, 6, 7, 7),
+              type = c("intake", "discharge", "intake", "intake", "discharge",
+                       "intake", "discharge", "intake", "intake", "intake", "discharge"))
> df
      id type     
   <dbl> <chr>    
 1     1 intake   
 2     1 discharge
 3     2 intake   
 4     3 intake   
 5     3 discharge    
 6     4 intake   
 7     4 discharge
 8     5 intake   
 9     6 intake   
10     7 intake   
11     7 discharge
Run Code Online (Sandbox Code Playgroud)

对此:

      id type     
   <dbl> <chr>    
 1     1 intake   
 2     1 discharge   
 3     3 intake   
 4     3 discharge    
 5     4 intake   
 6     4 discharge 
 7     7 intake   
 8     7 discharge
Run Code Online (Sandbox Code Playgroud)

因此,不具有摄入和排出的组(ids)将被删除(并且仅保留那些同时具有摄入和排出的组)。

我希望这是有道理的...抱歉,这是漫长的一天。

Ron*_*hah 5

"intake"这是选择同时具有和 的组的方法"discharge"

library(dplyr)

values <- c('intake', 'discharge')

df %>%
  group_by(id) %>%
  filter(all(values %in% type) & type %in% values) %>%
  ungroup

#     id type     
#  <dbl> <chr>    
#1     1 intake   
#2     1 discharge
#3     3 intake   
#4     3 discharge
#5     4 intake   
#6     4 discharge
#7     7 intake   
#8     7 discharge
Run Code Online (Sandbox Code Playgroud)

all(values %in% type)选择具有这两个值的完整组,而type %in% values会在这些组中选择具有这两个值之一的行。