在这里的问题中,我有一个可以追溯到1880年的流行婴儿名字的数据集。我试图找到永恒流行的婴儿名字,这意味着在我的数据中每年最常见的 30 个性别名称。
我尝试过使用group_by、top_n和过滤器,但对程序还不是很好,所以不确定正确的顺序和思维在这里如何。
library(babynames)
timeless <- babynames %>% group_by(name, sex, year) %>% top_n(30) %>% filter()
我得到了一个大型数据表,其中包含每年数据的 30 个最常见的名称,但我想比较一下它以找到每年最常见的名称。我的教授暗示应该有四个永恒的男孩名字,和一个永恒的女孩名字。任何帮助不胜感激!
这是答案。
library(babynames)
library(dplyr)
timeless <- babynames %>%
group_by(sex, year) %>%
top_n(30) %>%
ungroup() %>%
count(sex, name) %>%
filter(n == max(babynames$year) - min(babynames$year) + 1)
timeless
# # A tibble: 5 x 3
# sex name n
# <chr> <chr> <int>
# 1 F Elizabeth 138
# 2 M James 138
# 3 M John 138
# 4 M Joseph 138
# 5 M William 138
关于您的原始代码,group_by(name, sex, year) %>% top_n(30)
没有意义,因为name
、sex
和year
的所有组合都是唯一的,因此您无需提交"前 30 名"。