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
相关产品推荐
相关产品推荐

