在变量中搜索字符串并返回匹配的字符串

Posted

技术标签:

【中文标题】在变量中搜索字符串并返回匹配的字符串【英文标题】:Search string in variable and return the matched string 【发布时间】:2017-08-03 18:13:48 【问题描述】:

我需要一些帮助来将存储在向量中的几个字符串与存储在数据框 (data.table) 的列中的地址进行匹配。我的数据库非常大,大约有 100 万条记录,因此我更喜欢使用 data.table。

下面是数据和向量的虚拟样本 -

my <- data.frame(add=c("50, nutan nagar Mum41","50, nutan Mum88 Maha","77, amar nagar Blr79 Bang","54, veer build Chennai3242","amar 755 Blr 400018"))

vec1 <- c("Mum","Blr","Chennai")

我需要使用我的变量 add 中的每个地址来搜索 vec1 中的每个字符串。如果变量在地址中找到来自 vec1 的任何字符串,它应该在新列 result 中返回匹配的字符串。如果有多个匹配,它应该返回第一个匹配的值,即如果它在一个地址中找到“Mum”和“Blr”,它应该返回“Mum”。

根据虚拟数据,预期结果将是 -

my$result <- c("Mum","Mum","Blr","Chennai","Blr")

我尝试使用 grep / grepl,但他们给出错误“参数‘模式’的长度 > 1,并且只会使用第一个元素”

我尝试使用str_match,但是对于在地址中找到的向量中的每个字符串,而不是值本身,得到 TRUE / FALSE。

我们怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

我们可以使用str_extract

library(stringr)
str_extract(my$add, paste(vec1, collapse="|"))
#[1] "Mum"     "Mum"     "Blr"     "Chennai" "Blr"   

base R

regmatches(my$add, regexpr(paste(vec1, collapse="|"), my$add))
#[1] "Mum"     "Mum"     "Blr"     "Chennai" "Blr"    

【讨论】:

比我的解决方案干净得多,不知道这些功能。谢谢你介绍我;) @akrun,太好了!!谢谢!!你做得很简单。 @akrun,该解决方案适用于虚拟数据,但不适用于实际数据。我检查了变量类型并将它们转换为字符,更改了类等,但仍然没有从向量中找到任何文本。在我的实际数据中,文本都是韩文字符,这会是一个问题吗?我们怎么能克服它。从昨晚开始我一直在尝试,但没有运气。两种方法都试过了。请推荐!! @user1412 你能查一下this @akrun,非常感谢。通过浏览该站点上的几个页面,我发现了代码stri_encode(str, from = NULL, to = NULL, to_raw = FALSE),它起到了作用。就我而言,我使用了 stri_encode(str, from = "EUC-KR", to = "UTF-8", to_raw = FALSE) 。您的原始代码无需更改粘贴代码即可工作。再次感谢你 akrun :) !!【参考方案2】:

基于 R 的可能解决方案:

vec1[sapply(as.data.frame(do.call(rbind,lapply(vec1, 
        function(x) grepl(x,my$add)))), function(y) min(which(y)))]

返回:

[1] "Mum"     "Mum"     "Blr"     "Chennai" "Blr"   

希望这会有所帮助!

【讨论】:

感谢您的回答!!我需要了解更多关于应用家庭功能的信息。 当我尝试在我的 1m 条记录的实际数据上使用韩文文本实现此代码时,我收到错误“错误其中(y):'which' 的参数不合逻辑”。 ....可能出了什么问题?

以上是关于在变量中搜索字符串并返回匹配的字符串的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas Regex:在列中搜索带有通配符的字符串并返回匹配项[重复]

text 从项数组中搜索字符串值并返回匹配的数组项。

lua入门笔记7 字符串库

搜索字符串数组以找到匹配的单词之一

将字符串匹配到多个正则表达式模式并返回组号

javascript - 在对象数组中,返回任何值与特定字符串匹配的对象