在 R 中的多行上过滤一个组

Phi*_*.He 1 if-statement group-by r filter dplyr

我有一个像这样的数据框,带有 ID 和两个条件:

df <- data.frame(ID=c("A", "A", "A", "B", "C"), cond1=c("yes", "yes", "no", "no", "yes"), cond2=c("no", "no", "yes", "yes", "yes"))
df
   ID cond1 cond2
1  A   yes    no
2  A   yes    no
3  A    no   yes
4  B    no   yes
5  C   yes   yes
Run Code Online (Sandbox Code Playgroud)

我想过滤适用 cond1 和 cond2 的 ID(=是),但它不必在同一行中为真。这意味着我想过滤掉 ID A 和 C,而不是 B。

我尝试使用 dplyr 对 group_by() 和 filter() 进行分组:

df %>%
group_by(PID)%>%
filter(cond1==yes&cond2==yes)
Run Code Online (Sandbox Code Playgroud)

但这只会过滤出一个 PID/行,其中 cond 1 和 cond 2 都适用(所以只有 ID C/行 5)。

我可以做些什么来按组过滤 PID/行,其中有两个条件,在一组中 t0 都为真,但在一行中不为真?

谢谢!

Ron*_*hah 5

你可以使用any-

library(dplyr)

df %>%
  group_by(ID) %>%
  filter(any(cond1 == 'yes') && any(cond2 == 'yes')) %>%
  ungroup

#  ID    cond1 cond2
#  <chr> <chr> <chr>
#1 A     yes   no   
#2 A     yes   no   
#3 A     no    yes  
#4 C     yes   yes  
Run Code Online (Sandbox Code Playgroud)