r - 如何在我的数据集中找到最长的名称(按字母)?
问题描述
我有一个问题集,希望我在“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
我究竟做错了什么?
解决方案
我们可以group_by
name
和sum
每个名字的所有出现,只保留那些出现超过 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
推荐阅读
- c - C 程序被检测为恶意软件
- sql - PostgreSQL 找不到函数
- r - 如何根据R中的另一个向量位置向向量添加元素
- python-3.x - GLM 和带有 statsmodels 的 Logit 模型有什么区别?
- excel - 导入 CSV,而不将数据格式化为日期和数字
- sql - Postgesql:计数包含项目的标签
- c - 包含 sdl2/sdl_image.h 时出现错误
- ios - 将c字符串转换为字符串sqlite swift
- java - 错误:DexGuard Gradle 插件:不支持 Android Gradle 插件版本。(4.0.0),支持的版本包括 [2.3.0:3.6.*]
- php - 使用没有jquery的php从select2获取值