在这里的问题中,我有一个受欢迎的婴儿名字数据集,其历史可以追溯到1880年。我试图找到永恒的受欢迎的婴儿名字,这意味着在我的数据中,该性别每年都会出现30个最通用的名字。
我曾尝试使用group_by,top_n和filter,但是对程序的了解还不是很充分,所以不确定在这里如何正确使用顺序和思维。
library(babynames)
timeless <- babynames %>% group_by(name, sex, year) %>% top_n(30) %>% filter()
我将获得一个大的数据表,其中包含每年数据的30个最常用的名称,但是我想将其与每年的最常用名称进行比较。我的教授暗示应该有四个永恒的男孩名字和一个永恒的女孩名字。任何帮助表示赞赏!
答案 0 :(得分:1)
这是答案。
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个”。