按数值变量过滤但需要满足多个分类组
Filtering by Numerical Variable but Need to Satisfy Multiple Categorical Groups
我正在使用 babynames 数据集的修改版本,可以通过安装 babynames 包并调用:
# to install the package
install.packages('babynames')
# to load the package
library(babynames)
# to get the only one dataframe of interest from the package
babynames <- babynames::babynames
# the modified data that I'm working with
babynames_prop_sexes <- babynames %>%
select(-prop, -year) %>%
group_by(name, sex) %>%
mutate(total_occurence = sum(n))
我需要整理出现次数超过 10000 次的名字男女。我该如何处理? (最好使用 dplyr,但欢迎使用任何方法。)
在此先感谢您的帮助!
可能有更优雅的解决方案。但这应该会为您提供一个包含 > 10000 个条目的名称列表,同时显示为 M 和 F。
对于方法,我只是继续使用 dplyr
个动词。在使用 filter
删除出现 < 10000 次的条目后,我可以 group_by
名称并使用 tally()
,知道当该条目出现两次时 n = 2,一次是M 一次 F.
large_total_both_genders_same_name <- babynames %>%
group_by(name, sex) %>%
summarize(total = sum(n)) %>%
filter(total > 10000) %>%
arrange(name) %>%
group_by(name) %>%
tally() %>%
arrange(desc(n)) %>%
filter(n == 2) %>%
dplyr::select(name)
如果您想通过该候选名称列表过滤原始文件,您可以在我们创建的 table 上使用 semi_join 来缩短列表。在这种情况下,除非您还包含已删除的年份列,否则您正在查看的内容不会很明显。
original_babynames_shortened <- babynames_prop_sexes %>%
filter(name %in% large_total_both_genders_same_name$name)
但无论如何,这是一个常见的过程。创建某种摘要 table,保存为自己的 'intermediary' table,可以这么说,然后将其作为过滤器加入到您的原始摘要中。有时这一切可以一次完成,但在我看来,将其分成两部分通常更容易。
我正在使用 babynames 数据集的修改版本,可以通过安装 babynames 包并调用:
# to install the package
install.packages('babynames')
# to load the package
library(babynames)
# to get the only one dataframe of interest from the package
babynames <- babynames::babynames
# the modified data that I'm working with
babynames_prop_sexes <- babynames %>%
select(-prop, -year) %>%
group_by(name, sex) %>%
mutate(total_occurence = sum(n))
我需要整理出现次数超过 10000 次的名字男女。我该如何处理? (最好使用 dplyr,但欢迎使用任何方法。)
在此先感谢您的帮助!
可能有更优雅的解决方案。但这应该会为您提供一个包含 > 10000 个条目的名称列表,同时显示为 M 和 F。
对于方法,我只是继续使用 dplyr
个动词。在使用 filter
删除出现 < 10000 次的条目后,我可以 group_by
名称并使用 tally()
,知道当该条目出现两次时 n = 2,一次是M 一次 F.
large_total_both_genders_same_name <- babynames %>%
group_by(name, sex) %>%
summarize(total = sum(n)) %>%
filter(total > 10000) %>%
arrange(name) %>%
group_by(name) %>%
tally() %>%
arrange(desc(n)) %>%
filter(n == 2) %>%
dplyr::select(name)
如果您想通过该候选名称列表过滤原始文件,您可以在我们创建的 table 上使用 semi_join 来缩短列表。在这种情况下,除非您还包含已删除的年份列,否则您正在查看的内容不会很明显。
original_babynames_shortened <- babynames_prop_sexes %>%
filter(name %in% large_total_both_genders_same_name$name)
但无论如何,这是一个常见的过程。创建某种摘要 table,保存为自己的 'intermediary' table,可以这么说,然后将其作为过滤器加入到您的原始摘要中。有时这一切可以一次完成,但在我看来,将其分成两部分通常更容易。