R语言如何判断数据框中单词是否为姓名并汇总姓名出现总次数
R语言实现高频词姓名汇总的方法
实现思路
将原始高频词数据拆分为「属于指定姓名列表」和「不属于指定姓名列表」两个子集,前者求和后生成Word值为Names的新行,后者直接保留原有内容,最后合并两个子集即可得到目标结果。
前置示例数据
先构造可复现的原始数据和姓名列表:
# 原始高频词统计数据框 word_freq <- data.frame( Word = c("Oliver", "Great", "Jacob", "Fantastic"), Times = c(3, 8, 2, 6), stringsAsFactors = FALSE ) # 自定义需要汇总的姓名列表 name_list <- c("Oliver", "Jacob")
基础R实现(无需安装第三方包)
# 计算所有姓名类条目的总出现次数 name_total <- sum(word_freq$Times[word_freq$Word %in% name_list]) # 提取非姓名类的所有条目 non_name_df <- word_freq[!word_freq$Word %in% name_list, ] # 合并汇总行和非姓名条目得到最终结果 result_df <- rbind( data.frame(Word = "Names", Times = name_total), non_name_df )
dplyr实现(适合tidyverse生态用户)
library(dplyr) result_df <- word_freq %>% # 标记条目是否属于姓名类 mutate(is_name = Word %in% name_list) %>% # 分组汇总:姓名类统一求和,非姓名类保留原值 summarise( Word = ifelse(is_name, "Names", Word), Times = sum(Times), .by = c(is_name, Word) ) %>% # 合并相同Word的姓名类条目 summarise( Times = sum(Times), .by = Word )
输出结果
打印result_df即可得到目标格式:
Word Times 1 Names 5 2 Great 8 3 Fantastic 6
内容的提问来源于stack exchange,提问作者RobertoEmilio
相关产品推荐
相关产品推荐

