Выбор групп зависит от значений в двух столбцах в dplyr - PullRequest
2 голосов
/ 16 июня 2020

Здравствуйте, у меня есть df, например:

Groups COL2 COL3
G1 2 8
G1 3 4
G1 0 3
G2 1 3
G2 9 4
G3 3 89
G3 3 5
G4 1 7
G4 2 3

, и я хотел бы выбирать только группы, если хотя бы строка удовлетворяет двум следующим условиям: COL2 < 3 и COL3 > 5. Таким образом, здесь я бы выбрал только группы G1 и G4.

Groups COL2 COL3
G1 2 8
G1 3 4
G1 0 3
G4 1 7
G4 2 3

Пробовал:

df%>%
  group_by(Groups) %>%
  filter(any(COL2 <3) & any(COL3 >5)) %>%

1 Ответ

1 голос
/ 16 июня 2020

Если вы хотите выбрать только те группы, в которых хотя бы строка удовлетворяет обоим условиям (вместо того, чтобы условия выполнялись по отдельности хотя бы один раз в группе), вы можете использовать следующее.

# 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
...