如何在R语言中按单词分组汇总文本出现情况及对应频率
R语言按单词分组展示文本出现情况及对应频率
以下提供三种常用实现方式,可根据使用习惯选择:
方法1:Base R 原生实现
无需额外安装包,直接用原生函数完成分组输出:
# 定义示例数据 df <- data.frame( word=c("a", "b", "c", "e", "g", "a", "c", "f", "b", "d", "e", "c", "a", "h", "i"), text=c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5), freq=c(10,3,5,8,2,6,7,4,9,11,18,2,1,5,6) ) # 按单词分组并格式化输出 by(df, df$word, function(x) { cat(sprintf('单词"%s"出现在文本%s,对应频率为%s\n', x$word[1], paste(x$text, collapse = "、"), paste(x$freq, collapse = "、"))) })
输出结果:
单词"a"出现在文本1、2、5,对应频率为10、6、1 单词"b"出现在文本1、3,对应频率为3、9 单词"c"出现在文本1、3、4,对应频率为5、7、2 单词"d"出现在文本4,对应频率为11 单词"e"出现在文本2、4,对应频率为8、18 单词"f"出现在文本3,对应频率为4 单词"g"出现在文本2,对应频率为2 单词"h"出现在文本5,对应频率为5 单词"i"出现在文本5,对应频率为6
方法2:dplyr 包实现
适合习惯tidyverse语法的用户,代码可读性更强:
# 首次使用需安装dplyr包 # install.packages("dplyr") library(dplyr) # 分组汇总并生成输出文本 result_df <- df %>% group_by(word) %>% summarise( text_list = paste(text, collapse = "、"), freq_list = paste(freq, collapse = "、"), .groups = "drop" ) %>% mutate(output = sprintf('单词"%s"出现在文本%s,对应频率为%s', word, text_list, freq_list)) # 打印结果 cat(paste(result_df$output, collapse = "\n"))
运行后输出与Base R方法完全一致。
方法3:data.table 包实现
针对大数据量场景,运行效率优于原生方法和dplyr:
# 首次使用需安装data.table包 # install.packages("data.table") library(data.table) # 转换为data.table格式 dt <- as.data.table(df) # 分组汇总并格式化输出 dt[, .( text_list = paste(text, collapse = "、"), freq_list = paste(freq, collapse = "、") ), by = word][, cat(sprintf('单词"%s"出现在文本%s,对应频率为%s\n', word, text_list, freq_list))]
同样会输出符合要求的结果。
内容的提问来源于stack exchange,提问作者user21390049
相关产品推荐
相关产品推荐

