有关过滤大型数据集的问题

时间:2019-09-26 00:00:33

标签: r group-by dplyr tidyverse mutate

在这里的问题中,我有一个受欢迎的婴儿名字数据集,其历史可以追溯到1880年。我试图找到永恒的受欢迎的婴儿名字,这意味着在我的数据中,该性别每年都会出现30个最通用的名字。

我曾尝试使用group_by,top_n和filter,但是对程序的了解还不是很充分,所以不确定在这里如何正确使用顺序和思维。

library(babynames)

timeless <- babynames %>% group_by(name, sex, year) %>% top_n(30) %>% filter()

我将获得一个大的数据表,其中包含每年数据的30个最常用的名称,但是我想将其与每年的最常用名称进行比较。我的教授暗示应该有四个永恒的男孩名字和一个永恒的女孩名字。任何帮助表示赞赏!

1 个答案:

答案 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)毫无意义,因为namesexyear的所有组合都是唯一的,因此您无需填写“前30个”。