Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在变量中搜索字符串并返回匹配的字符串_R_Regex_String_Stringr - Fatal编程技术网

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

R 在变量中搜索字符串并返回匹配的字符串,r,regex,string,stringr,R,Regex,String,Stringr,我需要一些帮助来匹配存储在vector中的几个字符串和存储在数据帧(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 4

我需要一些帮助来匹配存储在vector中的几个字符串和存储在数据帧(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")

my一个可能的解决方案是使用base 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"   

希望这有帮助

我们可以使用
stru-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,解决方案对虚拟数据有效,但对实际数据无效。我已经检查了变量类型,并将它们转换为字符,更改了类等,但仍然没有从向量中找到任何文本。在我的实际数据中,文本都是韩文字符,这会是一个问题吗?我们怎么能克服这一点呢。从昨晚开始我就一直在努力,但没有成功。两种方法都试过了。请建议@user1412你能查一下@akrun吗,非常感谢。通过浏览这个站点上的两个页面,我找到了代码
stri_encode(str,from=NULL,to=NULL,to_raw=FALSE)
,这就成功了。在我的例子中,我使用了stri_编码(str,from=“EUC-KR”,to=“UTF-8”,to_raw=FALSE)
。您的原始代码在粘贴代码中没有更改,但仍然有效。再次感谢你,阿克伦:)!!谢谢你的回答!!我需要更多地了解apply系列函数。当我试图在我的1m记录的实际数据上使用韩文文本实现这段代码时,我得到了错误“error in which(y):which的参数不符合逻辑”…可能出了什么问题?
regmatches(my$add, regexpr(paste(vec1, collapse="|"), my$add))
#[1] "Mum"     "Mum"     "Blr"     "Chennai" "Blr"