如何在数据集中找到最长的名字(字母)?

问题描述 投票:0回答:1

我有一个问题集,希望我找出'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 name,我希望消除上述问题。我现在在这里:

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
1个回答
0
投票

我们可以group_by namesum所有出现的每个名称,仅保留出现次数超过1000次的名称,使用nchar计算长度并选择前两个值。

library(babynames)
library(dplyr)

babynames %>%
  group_by(name) %>%
  summarise(n = sum(n)) %>%
  filter(n > 1000) %>%
  mutate(name_length = nchar(name)) %>%
  top_n(2, name_length)

#  name              n name_length
#  <chr>         <int>       <int>
#1 Maryelizabeth  1969          13
#2 Michaelangelo  1236          13
© www.soinside.com 2019 - 2024. All rights reserved.