通过在另一列中出现多个值来过滤组

Gre*_*reg 2 r dplyr

类似于这个问题,但增加了皱纹。我只想过滤在组的任何行的特定列中具有两个(或全部几个)值的行组。

例如,假设我有这个数据框:

df <- data.frame(Group=LETTERS[c(1,1,1,2,2,2,3,3,3,3)], Value=c(5, 1:4, 1:4, 5))
Run Code Online (Sandbox Code Playgroud)

我想要那些字母,其中任何字母都有对应值为 4 的行和对应值为 5 的行,所以:

  Group Value
  <fct> <dbl>
1 C         2
2 C         3
3 C         4
4 C         5
Run Code Online (Sandbox Code Playgroud)

我能做到这一点与一对any内部调用filter是这样的:

df %>% 
  group_by(Group) %>% 
  filter(any(Value == 4),
         any(Value == 5))
Run Code Online (Sandbox Code Playgroud)

有没有办法在一行中进行过滤器调用?像:(注意这不起作用all_of不是真正的功能)

df %>% 
  group_by(Group) %>% 
  filter(all_of(Value == 4 & Value == 5))
Run Code Online (Sandbox Code Playgroud)

akr*_*run 6

all是一个有效的函数,可以与%in%(对于长度 >=1 的向量)结合使用

library(dplyr)
df %>% 
    group_by(Group) %>%
    filter(all(c(4, 5) %in% Value))
# A tibble: 4 x 2
# Groups:   Group [1]
#  Group Value
#  <fct> <dbl>
#1 C         2
#2 C         3
#3 C         4
#4 C         5
Run Code Online (Sandbox Code Playgroud)

或与sum逻辑向量

df %>%
    group_by(Group) %>%
    filter(!sum(!c(4, 5) %in% Value))
Run Code Online (Sandbox Code Playgroud)