在R中包含多个单词的列中查找最长的单词
我正在使用nycflights13软件包中的机场数据集。我想从第二列即名称中找到长度最长的单词 我试了两种方法在R中包含多个单词的列中查找最长的单词,r,dplyr,tidyverse,stringr,R,Dplyr,Tidyverse,Stringr,我正在使用nycflights13软件包中的机场数据集。我想从第二列即名称中找到长度最长的单词 我试了两种方法 在airports$name上使用stringr的strsplit+boundary frunction,但现在能够有效地完成这项工作 使用word函数,但它仅从名称中提取第一个单词 library(tidyverse) library(nycflights13) airport <- nycflights13::airports strsplit(word(airp
library(tidyverse)
library(nycflights13)
airport <- nycflights13::airports
strsplit(word(airport$name),boundary("word"))
库(tidyverse)
图书馆(nycflights13)
机场这里有一个带有purrr::map
的方法。首先,按空格拆分名称
列。然后对创建的列表应用自定义函数。我们可以使用[
将每个列表元素中的向量子集为最长的单词。我们可以通过对每个元素应用nchar
来确定最长的单词。which.max
可以告诉我们哪个最长
\u char
版本的map
将返回一个字符向量
library(tidyverse)
airport %>%
mutate(longest = map_chr(strsplit(name," "),
~ .x[which.max(nchar(.x))]),
wordlength = nchar(longest)) %>%
select(name,longest,wordlength)
## A tibble: 1,458 x 3
# name longest wordlength
# <chr> <chr> <int>
# 1 Lansdowne Airport Lansdowne 9
# 2 Moton Field Municipal Airport Municipal 9
# 3 Schaumburg Regional Schaumburg 10
# 4 Randall Airport Randall 7
# 5 Jekyll Island Airport Airport 7
# 6 Elizabethton Municipal Airport Elizabethton 12
# 7 Williams County Airport Williams 8
# 8 Finger Lakes Regional Airport Regional 8
# 9 Shoestring Aviation Airfield Shoestring 10
#10 Jefferson County Intl Jefferson 9
## … with 1,448 more rows
库(tidyverse)
机场%>%
变异(最长=map_chr(strsplit(name)”,
~.x[which.max(nchar(.x))],
wordlength=nchar(最长))%>%
选择(名称、最长、字长)
##A tibble:1458x3
#名称最长字长
#
#1兰斯敦机场兰斯敦9
#2摩顿机场市政机场市政9
#3绍姆堡地区绍姆堡10
#4兰德尔机场兰德尔7
#5杰基尔岛机场7
#6伊丽莎白市机场伊丽莎白市12
#7威廉姆斯县机场威廉姆斯8
#指湖地区机场地区8
#9小本经营航空机场小本经营10
#10杰斐逊县国际杰斐逊9
##…还有1448行
@ian campbell精彩的答案非常棒,在浏览网页时,我想出了另一个更简单的选项,以获得相同的结果(万一以后有人遇到这个问题)
airport$name[which.max(nchar(airport$name))]
我对这个问题的理解是作者想找到“长度最长的单词”,而不是最长的机场名称。这一意图通过他们使用的strsplit
得到了进一步证明。为什么使用map
而nchar
是矢量化的呢?啊,是的,很好。谢谢,这真的很有帮助。不过我还需要一步,才能在“最长”列中找到最长单词的长度。我想我能做到len(max)但我只是想知道%>%@VaibhavSingh中是否有一种复杂的方式,看看我的编辑是否能澄清你的问题。完成了,太棒了。我仍在分解映射和自定义函数,但看起来绝对正确
library(tidyverse)
library(nycflights13)
airport <- nycflights13::airports
airports %>%
separate_rows(name, sep = ' ') %>%
mutate(len=nchar(name)) %>%
select(name,len) %>%
arrange(desc(len))
airport %>%
mutate(longest = map(strsplit(name," "),~ nchar(.x))) %>%
unnest(longest) %>%
arrange(desc(longest))