Вопрос о фильтрации большого набора данных - PullRequest
2 голосов
/ 26 сентября 2019

В этой задаче у меня есть набор данных популярных имен детей, начиная с 1880 года. Я пытаюсь найти вневременные популярные имена детей, то есть 30 самых распространенных имен для своего пола в каждом году моих данных.

Я пытался использовать group_by, top_n и filter, но пока еще не очень хорошо разбираюсь в программе, так что неуверен, как здесь происходит правильный порядок и мышление.

library(babynames)

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

Я получаю большую таблицу данных с 30 наиболее распространенными именами для каждого года данных, но я хочу сравнить это, чтобы найти наиболее распространенные имена в каждом году.Мой профессор намекнул, что должно быть четыре вневременных имени мальчика и одно вневременное имя девочки.Любая помощь приветствуется!

1 Ответ

0 голосов
/ 26 сентября 2019

Вот ответ.

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".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...