关于使用filter()函数设置数据的思考

mal*_*425 1 r dplyr tidyr

我在一个按性别区分学校的区域中有一个数据集,我正在考虑比较同一所学校内的性别表现,但为此,我想限制我的数据只包括同时教授两种性别的学校。换句话说,我想删除只教授女性或男性的学校。

以下是我目前的代码,但尽管其中包括几所教授两种性别的学校,但它给了我零的观察:

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

我的问题是,是否有一种有效的方法可以对我的数据进行子集化,而不必手动指定每个教授性别的学校名称?

Gre*_*gor 5

当您给出filter多个条件时,它将与“ and”组合。因此,您的代码将查找学校名称为空白(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
Run Code Online (Sandbox Code Playgroud)