我有一个问题集,希望我找出'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
我在做什么错?
我们可以group_by
name
和sum
所有出现的每个名称,仅保留出现次数超过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