Группа фильтров для включения условия по столбцам с помощью dplyr

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

enter image description here

И я хотел бы, чтобы мои выходные данные включали только Health_facility, в столбце сезона которых присутствуют как «малярия», так и «не малярия».

я пытался

multi_hf %>%
group_by(health_facility) %>%
filter(season == "malaria" & season == "non-malaria") 

Однако я получаю табличку только со значениями NA.

Любая помощь высоко ценится! Данные:

structure(list(season = c("malaria", "malaria", "malaria", "malaria", 
"malaria", "malaria", "malaria", "malaria", "malaria", "malaria", 
"malaria", "malaria", "malaria", "malaria", "malaria", "malaria", 
"malaria", "malaria", "malaria", "malaria", "malaria", "malaria", 
"malaria", "malaria", "malaria", "malaria", "non-malaria", "non-malaria", 
"non-malaria", "non-malaria", "non-malaria", "non-malaria", "non-malaria", 
"non-malaria", "non-malaria", "non-malaria", "non-malaria", "non-malaria", 
"non-malaria", "non-malaria", "non-malaria", "non-malaria", "non-malaria", 
"non-malaria", "non-malaria", "non-malaria", "non-malaria", "non-malaria", 
"non-malaria", "non-malaria", "non-malaria", "non-malaria", "non-malaria", 
"non-malaria", "non-malaria", "non-malaria", "non-malaria"), 
    health_facility = c("Hospital Agostinho Neto", "Hospital Baptista de Sousa", 
    "Health Delegation São Miguel", "Health Center Chã de Alecrim", 
    "Health Center Fonte Inês", "Health Delegation Maio", "Health Delegation Sao Vincente", 
    "Health Delegation Sao Vincente", "Hospital Ribeira Grande", 
    "Health Delegation Ribeira Brava", "Health Delegation Santa Cruz", 
    "Health Delegation Paul", "Center Delegation Santa Catarina", 
    "Regional Hospital Fogo e Brava", "Health Delegation São Filipe", 
    "Health Center Cidade Velha", "Health Delegation Tarrafal Santiago", 
    "Health Delegation Tarrafal Santiago", "Health Delegation Tarrafal Santiago", 
    "Health Center Sao Salvador do Mundo – Picos", "Health Delegation Tarrafal Santiago", 
    "Health Delegation São Lourenço dos Orgaos", "Health Delegation Ribeira Grande", 
    "Health Delegation of Praia", "Center Delegation Santa Catarina", 
    "Regional Hospital Santiago Norte", "Health Delegation Ribeira Brava", 
    "Health Delegation Ribeira Brava", "Hospital Baptista de Sousa", 
    "Health Delegation Paul", "Health Delegation Ribeira Brava", 
    "Health Center Sao Salvador do Mundo – Picos", "Health Delegation Sao Vincente", 
    "Health Delegation São Miguel", "Health Delegation Tarrafal Santiago", 
    "Regional Hospital Santiago Norte", "Regional Hospital Santiago Norte", 
    "Regional Hospital Santiago Norte", "Regional Hospital Santiago Norte", 
    "Health Delegation Sao Vincente", "Regional Hospital Fogo e Brava", 
    "Center Delegation Santa Catarina", "Health Center Chã de Alecrim", 
    "Hospital Agostinho Neto", "Hospital Ribeira Grande", "Health Delegation São Lourenço dos Orgaos", 
    "Health Delegation São Lourenço dos Orgaos", "Health Delegation São Filipe", 
    "Health Center Fonte Inês", "Hospital Agostinho Neto", "Regional Hospital Fogo e Brava", 
    "Health Delegation of Praia", "Health Delegation Maio", "Health Delegation Ribeira Grande", 
    "Health Delegation São Lourenço dos Orgaos", "Health Delegation Santa Cruz", 
    "Health Center Cidade Velha")), class = c("data.table", "data.frame"
), row.names = c(NA, -57L), .internal.selfref = <pointer: 0x0000017c5a4b1ef0>)
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
19
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

filter(season == "malaria" & season == "non-malaria") означает, что выбранная строка содержит как «малярию», так и «не малярию», что невозможно, поскольку одна строка может иметь только одно значение. Вот почему вы получаете 0 строк в общих данных образца. В выходных данных образца данных нет строк NA, но это потому, что он не содержит никаких значений NA в данных образца. Значение NA возвращается при сравнении с ==, если вы используете %in%, это должно помочь.

Так что, вероятно, вы хотите выбрать health_facility, который имеет оба значения, которые можно сделать как -

library(dplyr)

multi_hf %>%
  arrange(health_facility) %>%
  group_by(health_facility) %>%
  filter(all(c("malaria", "non-malaria") %in% season)) %>%
  ungroup()

Лично я предпочитаю более чистое решение. Здесь очень хорошо подходит использование n_distinct:

df %>%
  group_by(health_facility) %>%
  filter(n_distinct(season) == 2) %>%
  ungroup()

Другие вопросы по теме