如何统计指定词表单词在dataframe或dfm中的出现频次
统计指定词表在DataFrame/DFM中的词频
问题说明
现有指定词表,需统计其中每个单词在含文本的DataFrame或DFM中的出现次数,相关信息如下:
词表定义
words <- dictionary(list(words = c("House", "Mountain", "Blue", "Night")))
原始DataFrame
| id | title | date | text |
|---|---|---|---|
| 1 | blablabla | 22.07.2023 | blablablabla Blue blablabla |
| 2 | blablabla | 23.06.2023 | bala Blue blabla Blue blabla Blue |
期望输出
| id | title | date | text | word | count |
|---|---|---|---|---|---|
| 1 | blablabla | 22.07.2023 | blablablabla Blue blablabla | Blue | 1 |
| 2 | blablabla | 23.06.2023 | bala Blue blabla Blue blabla Blue | Blue | 3 |
实现方案
提供两种适配不同场景的实现方式:
方式一:直接处理DataFrame(依赖dplyr+stringr)
library(dplyr) library(stringr) # 提取词表中的目标单词 target_words <- c("House", "Mountain", "Blue", "Night") # 逐行统计词频并整理格式 result_df <- original_df %>% rowwise() %>% mutate( word = list(target_words), count = str_count(text, fixed(unlist(word))) ) %>% unnest(c(word, count)) %>% filter(count > 0) # 过滤未出现的单词
方式二:通过DFM处理(依赖quanteda包)
library(quanteda) library(dplyr) library(tidyr) # 基于文本创建DFM并匹配词表 dfm_obj <- dfm(original_df$text, dictionary = words) # 将DFM转换为长格式数据框 dfm_stats <- convert(dfm_obj, to = "data.frame") %>% mutate(id = original_df$id) %>% pivot_longer(cols = -id, names_to = "word", values_to = "count") %>% filter(count > 0) # 合并原始数据与统计结果 result_df <- original_df %>% left_join(dfm_stats, by = "id") %>% select(id, title, date, text, word, count)
内容的提问来源于stack exchange,提问作者Noel Harris
相关产品推荐
相关产品推荐

