Если вы хотите выбрать только те группы, в которых хотя бы строка удовлетворяет обоим условиям (вместо того, чтобы условия выполнялись по отдельности хотя бы один раз в группе), вы можете использовать следующее.
# create vector of groups that satisfy the conditions
ok_groups <- (df %>%
group_by(Groups) %>%
filter(COL2 <3 & COL3 >5))$Groups
# filter original dataframe according to ok_groups
df %>% filter(Groups %in% ok_groups)
Вывод
> ok_groups
# [1] "G1" "G4"
> df %>% filter(Groups %in% ok_groups)
# Groups COL2 COL3
# 1 G1 2 8
# 2 G1 3 4
# 3 G1 0 3
# 4 G4 1 7
# 5 G4 2 3
EDIT
Я просто вставляю здесь более короткое решение для будущих зрителей
df %>%
group_by(Groups) %>%
filter(any(COL2 < 3 & COL3 > 5))
# Groups COL2 COL3
# 1 G1 2 8
# 2 G1 3 4
# 3 G1 0 3
# 4 G4 1 7
# 5 G4 2 3