Фильтровать по обоим значениям в группе по

#r

#r

Вопрос:

Я хотел бы отфильтровать 2 совпадающих значения столбца на основе условия группирования по. Например, из набора данных пациентов я должен сопоставить оба типа посещения 1 и 2, сгруппированных по идентификатору пациента.

Пока я использую следующий код.

 patients %>% group_by(PatientID) %>% filter(VisitType == "6" and VisitType == "7")
  

Это, однако, ничего не возвращает (что, я думаю, связано с тем, что VisitType 6 и 7 — это разные строки). Есть ли способ фильтрации таким образом, чтобы я получал что-то вроде приведенного ниже:

 PatientID     VisitType 
1                6
1                7
39               6
39               7
  

Комментарии:

1. Пожалуйста, поделитесь результатами dput(patients)

2. Похоже, вы хотите знать, есть ли «6» и «7» в столбце VisitType внутри группы. Как насчет filter("6" %in% VisitType, "7" %in% VisitType) ?

3. Пожалуйста, опубликуйте воспроизводимый пример ваших данных и желаемый результат для этого образца данных . Люди пытаются вам помочь, но мы не сможем, если вы не дадите нам достаточно для проверки вашей проблемы.

Ответ №1:

Вам не нужно group_by() просто фильтровать и упорядочивать, если это уже не будет в нужной форме.

 
patients %>%
  filter(VisitType %in% c(6,7)) %>%
  arrange(PatientID) # optional

  

Если вы хотите видеть только пациентов, у которых есть и то, и другое VisitType == 6 amp;amp; VisitType == 7 , то вам следует сделать что-то вроде

 patients %>%
  filter(VisitType %in% c(6,7)) %>%
  group_by(PatientID) %>%
  filter(n() >= 2)
  

Комментарии:

1. Однако это также позволяет выбирать для случаев, в которых всего 6 или 7. Я хотел бы видеть для всех пациентов, у которых в качестве типа посещения указаны 6 и 7. Вы предлагаете модификацию кода?

2. Отредактированный ответ все равно будет прерван, если идентификатор пациента содержит 6, но не 7 (например, 6 и 8)

3. @Frank Все, о чем я могу думать, это о том, сколько времени было потрачено впустую на этот вопрос, потому что они не будут публиковать повторную проверку своих данных.

4. @sparkh2o Смотри ответ сейчас. Это немного более подробно, чем хотелось бы, но действительно невозможно узнать, не видя ваших данных.