首页 > 解决方案 > 如何在我的数据集中找到最长的名称(按字母)?

问题描述

我有一个问题集,希望我在“babynames”数据集中找出“给至少 1000 个美国婴儿的两个最长的名字”。

我过去尝试过的代码是这样的:

babynames %>%
  mutate(long.name = str_count(babynames$name,
                     "[:alpha:]")) %>%
  filter(n >= 1000) %>%
  arrange(-long.name) %>%
  head(2) %>%
  select(name, long.name)

但它给了我这个:

name        long.name
  <chr>           <int>
1 Christopher        11
2 Christopher        11

通过 group_by 名称,我希望消除上述问题。这是我目前所在的位置:

babynames %>%
  filter(n >= 1000) %>%
  group_by(name) %>%
  mutate(long.name = str_count(babynames$name,
                                  "[:alpha:]")) %>%
  arrange(-long.name) %>%
  head(2)

我期待得到类似的东西:

name        long.name
  <chr>           <int>
1 Christopher        11
2 (some name)        10

但我明白了:

Error: Column `long.name` must be length 1 (the group size), not 1924665

我究竟做错了什么?

标签: r

解决方案


我们可以group_by namesum每个名字的所有出现,只保留那些出现超过 1000 次的名字,使用计算长度nchar并选择前 2 个值。

library(babynames)
library(dplyr)

babynames %>%
  group_by(name) %>%
  summarise(n = sum(n)) %>%
  filter(n > 1000) %>%
  mutate(name_length = nchar(name)) %>%
  #Can also do 
  #mutate(name_length = stringr::str_count(name, "[:alpha:]")) %>%
  top_n(2, name_length)

#  name              n name_length
#  <chr>         <int>       <int>
#1 Maryelizabeth  1969          13
#2 Michaelangelo  1236          13

推荐阅读