如何使用R语言stringr包统计并提取出现频率最高的前10个词汇
错误原因
str_sort是stringr包中专门用于对字符串向量按字典序排序的函数,不支持对数值类统计结果按数值大小排序- 你传入的
table(words)输出是带词汇名属性的频数值 contingency table,str_sort会强制将频数转为字符串后按字符顺序排序,和你需要的按频数降序排序的逻辑完全不符,因此无法得到正确结果。
正确实现方法
stringr的核心能力是字符串清洗、匹配、变换等操作,本身没有统计频数、按数值排序的相关功能,实际使用中我们通常会先通过stringr完成词汇预处理,再做高频词统计,完整示例如下:
# 加载依赖包 library(stringr) # 步骤1:用stringr对原始词汇做清洗(可根据你的数据情况调整清洗规则) clean_words <- words %>% str_to_lower() %>% # 统一转为小写,避免大小写不同导致同一词被统计为不同词汇 str_remove_all("[[:punct:]]") %>% # 剔除词汇附带的标点符号 str_trim() # 去除首尾多余空白字符 # 步骤2:统计前10高频词汇,输出格式和原base R代码完全一致 sort(table(clean_words), decreasing = TRUE)[1:10]
如果你需要完全匹配tidyverse的编码风格,也可以用以下写法:
library(stringr) library(dplyr) library(tibble) words %>% # 可插入任意stringr清洗逻辑 str_to_lower() %>% str_remove_all("[[:punct:]]") %>% str_trim() %>% # 统计排序取前10 table() %>% as_tibble() %>% arrange(desc(n)) %>% slice_head(n = 10)
内容的提问来源于stack exchange,提问作者Jane
相关产品推荐
相关产品推荐

