在R语言中从推文数据框生成去重的国家关联网络边列表
解决方案
问题背景
你有一组推文数据框,通过中日美三类关键词匹配文本,当前生成边列表的代码仅返回首个匹配项,需要实现以下三点:
- 每个匹配的国家生成单独行
- 将匹配关键词替换为对应国家名称
- 同一国家的多匹配项去重
实现代码
首先构建关键词-国家映射表,方便后续替换操作:
library(tidyverse) # 定义关键词向量(保留你的原始定义) chnID <- c("china", "beijing", "中国", "日中") jpnID <- c("japan", "tokyo") usaID <- c("united states", "washington", "アメリカ", "米国", "日米") # 构建关键词到国家名称的映射表 keyword_map <- tibble( keyword = c(chnID, jpnID), country = c(rep("China", length(chnID)), rep("Japan", length(jpnID))) ) # 示例推文数据框 usaTW <- data.frame(text = "beijing, tokyo, & washington to discuss economic concerns this weekend in japan.")
接下来处理推文数据,生成符合要求的边列表:
# 筛选包含中日关键词的推文(保留你的逻辑) usaPD <- usaTW %>% filter(str_detect(text, paste(keyword_map$keyword, collapse = "|"))) # 生成目标边列表 usaEL <- usaPD %>% # 提取文本中所有匹配的中日关键词 mutate(match_keywords = str_extract_all(text, paste(keyword_map$keyword, collapse = "|"))) %>% # 将每个匹配关键词拆分为单独行 unnest(match_keywords) %>% # 关联映射表,把关键词替换为对应国家名称 left_join(keyword_map, by = c("match_keywords" = "keyword")) %>% # 按来源国和目标国去重,同一国家仅保留一条边 distinct(source = "United States", country, .keep_all = FALSE) %>% # 重命名列以符合边列表格式 rename(dest = country)
代码说明
- 需求1实现:用
str_extract_all提取所有匹配的关键词,再通过unnest将每个关键词拆分为单独行 - 需求2实现:通过预定义的
keyword_map映射表,将匹配到的关键词替换为标准国家名称 - 需求3实现:用
distinct按source和country去重,确保同一国家仅保留一条关联记录
输出结果
运行后usaEL的结果为:
source dest 1 United States China 2 United States Japan
内容的提问来源于stack exchange,提问作者toast_ghost
相关产品推荐
相关产品推荐

