You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于名称列表,找出文本列含但names.in.text列缺失的名称

问题描述

现有两个R数据框:

data = data.frame("text" = c("John met Jay who met Jack who met Josh who met Jamie", "John and Jay and Jack and Josh and Jamie"), 
"names.in.text" = c("Jay; Jack; Josh; Jamie", "John; Jack; Josh; Jamie"), 
"missing.names" = c("",""))
names = data.frame("names" = c("John", "Jay", "Jack", "Josh", "Jamie"))

需要实现:以names$names为名称全集,判断data$names.in.text是否包含data$text中的所有名称,并将data$text中存在但data$names.in.text中缺失的名称填充到data$missing.names列,期望输出如下:

text           names.in.text missing.names
1 John met Jay who met Jack who met Josh who met Jamie  Jay; Jack; Josh; Jamie          John
2             John and Jay and Jack and Josh and Jamie John; Jack; Josh; Jamie           Jay

也可采用其他能直观展示文本列有但names.in.text列缺失名称的形式。

解决方案

可以结合dplyr和stringr包实现需求,步骤如下:

  1. 加载所需工具包:
library(dplyr)
library(stringr)
  1. 定义辅助函数,用于提取文本中的目标名称并对比找出缺失项:
find_missing_names <- function(text_str, names_in_text_str, name_list) {
  # 从text中提取全集内的名称
  text_names <- str_extract_all(text_str, paste(name_list, collapse = "|")) %>% unlist() %>% unique()
  # 拆分names.in.text中的名称列表
  listed_names <- str_split(names_in_text_str, "; ")[[1]]
  # 筛选出text中有但names.in.text里没有的名称
  missing <- setdiff(text_names, listed_names)
  # 拼接成字符串返回
  paste(missing, collapse = "; ")
}
  1. 逐行处理数据框,填充缺失名称:
data <- data %>%
  rowwise() %>%
  mutate(missing.names = find_missing_names(text, names.in.text, names$names)) %>%
  ungroup()
  1. 查看处理结果:
print(data)

输出与预期一致:

text           names.in.text missing.names
1 John met Jay who met Jack who met Josh who met Jamie  Jay; Jack; Josh; Jamie          John
2             John and Jay and Jack and Josh and Jamie John; Jack; Josh; Jamie           Jay

如果偏好基础R语法,也可以用循环实现:

# 基础R版本实现
name_list <- names$names
for (i in 1:nrow(data)) {
  text_names <- unique(str_extract_all(data$text[i], paste(name_list, collapse = "|"))[[1]])
  listed_names <- str_split(data$names.in.text[i], "; ")[[1]]
  data$missing.names[i] <- paste(setdiff(text_names, listed_names), collapse = "; ")
}

内容的提问来源于stack exchange,提问作者user17661126

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:55:20