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

R语言中提取数据框B中未在A出现的项(忽略大小写与别名)

R语言数据框名称匹配问题

我有两个数据框:

A <- data.frame(c("Nick", "Maria", "Liam", "Oliver", "Sophia", "james", "Lucas; Luc"))
B  <- data.frame(c("Liam", "Luc", "Evelyn; Eva", "James", "Harper", "Amelia"))

需要创建数据框C,包含数据框B中未在数据框A里出现的名称,要求:

  • 忽略大小写(比如James和james视为同一名称)
  • 分号分隔的别名(比如Lucas; Luc)视为同一名称

最终预期结果:

C <- data.frame(c("Evelyn; Eva", "Harper","Amelia")) 

解决方案

步骤1:统一格式并拆分别名

先把两个数据框的名称统一转为小写,再拆分分号分隔的别名,整理出A中包含的所有名称集合:

# 处理数据框A:提取所有别名并转为小写
A_names <- tolower(unlist(strsplit(as.character(A[[1]]), ";\\s*")))

# 处理数据框B:保留原始条目,同时提取每个条目的小写别名
B_processed <- data.frame(
  original = B[[1]],
  aliases = lapply(strsplit(as.character(B[[1]]), ";\\s*"), tolower)
)

步骤2:筛选B中未在A出现的条目

检查B的每个条目里的所有别名,只要有一个别名存在于A的名称集合中,就排除该条目;反之则保留:

# 判断B的每个条目是否有别名在A中存在
B_in_A <- sapply(B_processed$aliases, function(x) any(x %in% A_names))

# 筛选出符合条件的条目,创建数据框C
C <- data.frame(original = B_processed$original[!B_in_A])

验证结果

运行代码后,C的输出与预期一致:

> C
        original
1 Evelyn; Eva
2        Harper
3        Amelia

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:30:41