Мысли о подмножестве данных, используя функцию filter () - PullRequest
1 голос
/ 18 октября 2019

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

Ниже приведен мой текущий код, но он дает мне нулевые наблюдения, хотя включает несколько школ, в которых преподают оба пола:

## Limit Riyadh schools only to schools teaching both genders
two_gender_schools <- filter(riyadh_scores, school_name == "",
                             gender == "male", gender == "female")

У меня вопрос: есть ли эффективный способ подмножества моих данных без необходимости вручную указывать название каждой школы с указанием обоих полов?

1 Ответ

5 голосов
/ 18 октября 2019

Когда вы задаете filter несколько условий, он объединяет их с "и". Таким образом, ваш код ищет строки, в которых название школы пустое (school_name == ""), а пол - «мужской», а пол - «женский».

Вместо этого вы должны group_by(school_name) и продолжить оттуда. Пара вариантов:

two_gender_schools_a = riyadh_schools %>%
  group_by(school_name) %>%
  filter("female" %in% gender & "male" %in% gender)
  # %in% checks anywhere in the group, not row by row

two_gender_schools_b = riyadh_schools %>%
  group_by(school_name) %>%
  filter(n_distinct(gender) > 1)
  # look for schools that have more than 1 distinct value for gender
...