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

R语言数据框文本匹配:检查数据框B是否包含数据框A的全部元素

嘿,这需求很清晰,我来给你一步步实现~

首先咱们得先把数据框A和B正确构造出来,毕竟你给出的是原始内容,得转换成R能识别的数据框格式:

# 创建数据框A:单列存储要检查的动物名称
df_A <- data.frame(Animals = c("cat", "dog", "Rat", "Parrot", "Tiger"), stringsAsFactors = FALSE)

# 创建数据框B:单列存储目标文本内容
df_B <- data.frame(Text = "Give milk to cat dog bites life span of dog is 10 years Cow gives us milk Tiger have huge Jaws", stringsAsFactors = FALSE)

接下来核心需求是检查df_A里的每个动物是否在df_B的文本中存在。这里推荐用grepl()函数,搭配正则表达式的单词边界\\b,这样能确保匹配的是完整单词,避免像"dog"被误匹配成"doggy"这类情况。

方法一:基础R实现

# 提取df_B中的所有文本(如果有多行就合并成一个字符串)
text_content <- paste(df_B$Text, collapse = " ")

# 给df_A新增一列,标记每个动物是否存在于df_B中
df_A$Exists_in_B <- sapply(df_A$Animals, function(animal) {
  # 用单词边界包裹动物名称,匹配完整单词
  grepl(paste0("\\b", animal, "\\b"), text_content, ignore.case = FALSE)
})

# 查看最终结果
print(df_A)

方法二:dplyr包实现(更简洁)

如果你习惯用tidyverse风格的代码,可以用dplyr的mutate()来快速处理:

library(dplyr)

df_A <- df_A %>%
  mutate(Exists_in_B = grepl(paste0("\\b", Animals, "\\b"), paste(df_B$Text, collapse = " "), ignore.case = FALSE))

print(df_A)

运行结果示例

执行完代码后,你会得到这样的结果:

Animals Exists_in_B
1     cat        TRUE
2     dog        TRUE
3     Rat       FALSE
4  Parrot       FALSE
5   Tiger        TRUE

可以看到,cat、dog、Tiger在df_B的文本里存在,而Rat和Parrot不存在,符合预期。

另外提个小细节:如果需要忽略大小写匹配(比如把"rat"也当成匹配"Rat"),只需要把ignore.case参数改成TRUE就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:57:54