如何从stringr::words及采样样本new中找出5个最长单词(禁用grep)
解答两个关于提取最长单词的R语言问题
问题1:从stringr::words中找出5个最长的单词
要搞定这个问题,核心思路就是先算出每个单词的长度,再按长度从大到小排序,最后取前5个就行。具体代码如下:
# 先加载stringr包(如果还没加载的话) library(stringr) # 计算每个单词的长度 word_lengths <- nchar(stringr::words) # 把单词和对应的长度组合成数据框,方便后续排序和查看 word_data <- data.frame( word = stringr::words, length = word_lengths ) # 按长度降序排序,然后取前5条记录 top5_longest_words <- head(word_data[order(-word_data$length), ], 5) # 输出结果 print(top5_longest_words)
运行这段代码后,你就能得到stringr::words里长度排前5的单词,还会附带它们的长度,一目了然。
问题2:从采样样本new中找出5个最长单词(禁止使用grep)
先说明下:grep是用来做模式匹配的,咱们这个需求根本用不上它,所以完全可以用和问题1类似的思路解决,甚至能更简洁。假设你的new是从stringr::words采样得到的(比如new <- sample(stringr::words, 100)),下面给你两种实现方式:
方法一:数据框方式(清晰直观)
# 计算样本中每个单词的长度 new_word_lengths <- nchar(new) # 组合成数据框 new_word_data <- data.frame( word = new, length = new_word_lengths ) # 降序排序后取前5 top5_new_longest <- head(new_word_data[order(-new_word_data$length), ], 5) print(top5_new_longest)
方法二:向量直接操作(更简洁)
如果不想用数据框,直接对向量操作也能搞定,代码更短:
# 按单词长度降序排列样本中的单词 sorted_new <- new[order(-nchar(new))] # 取前5个就是最长的 top5_new_longest <- sorted_new[1:5] print(top5_new_longest)
这两种方法都完全避开了grep,完美满足你的要求~
内容的提问来源于stack exchange,提问作者lisa
相关产品推荐
相关产品推荐

