类似于这个问题,但增加了皱纹。我只想过滤在组的任何行的特定列中具有两个(或全部几个)值的行组。
例如,假设我有这个数据框:
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)
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)