【问题标题】:Question on filtering down a large dataset关于过滤大型数据集的问题
【发布时间】:2020-01-26 04:58:59
【问题描述】:

在这里的问题中,我有一个可以追溯到 1880 年的流行婴儿名字的数据集。我试图找到永恒流行的婴儿名字,这意味着在我的数据中每年的 30 个最常见的性别名称。

我尝试过使用 group_by、top_n 和 filter,但对程序还不是很熟悉,所以不确定这里的正确顺序和思路如何。

library(babynames)

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

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

【问题讨论】:

标签: r group-by tidyverse dplyr


【解决方案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) %&gt;% top_n(30) 没有意义,因为 namesexyear 的所有组合都是唯一的,因此您无需提交“前 30 名”。

【讨论】:

  • 你就是炸弹;谢谢!为什么要在带有过滤功能的行中添加+1?要将其添加为 tibble 中的另一列?
  • max(babynames$year) - min(babynames$year) + 1 计算数据集中可用的总年数。最后的n 应该等于那个数字。
猜你喜欢
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
  • 2021-11-21
  • 2010-12-02
  • 2022-10-01
  • 2020-06-28
  • 1970-01-01
  • 2019-06-29
相关资源
最近更新 更多