繁体   English   中英

在R中找到两个向量之间的匹配字符串

[英]Find matching strings between two vectors in R

我在R中有两个向量。我想找到它们之间的部分匹配。

我的数据

第一个来自名为muc的数据集,其中包含6400个街道名称。 muc $ name看起来像:

muc$name = c("Berberichweg", "Otto-Klemperer-Weg", "Feldmeierbogen" , "Altostraße",...)

另一个向量是d_vector。 它包含大约1400个名字。

d_vector = "Abel", "Abendroth", "von Abercron", "Abetz", "Abicht", "Abromeit", ...

我想找到所有街道名称,其中包含街道名称中某处d_vector的名称。

首先,我在导入csv数据(作为变量d)后进行了一些一般性的修改:

d_vector <- unlist(d$name) d_vector <- as.vector(as.matrix(d_vector))

到目前为止我尝试了什么

  • 然后我尝试用grep找到一个解决方案,将d_vector转换为包含一个长字符串,用|分隔 对于RegEx-Search:

result <- unique(grep(paste(d_vector, collapse="|"), muc$Name, value=TRUE, ignore.case = TRUE)) result

但结果会返回所有街道名称。

  • 我也尝试使用agrep,它重新调整了Out of memory -Error。

  • 当我d_vector %in% muc$name尝试d_vector %in% muc$name它只返回一个TRUE和数百个FALSE,这似乎不正确。

你有什么建议可以解决我的错误或者我可以使用哪个库吗? 我正在为R寻找像python的“fuzzywuzzy”之类的东西

原则上,您的解决方案适用于一些虚拟数据:

streets = c("Berberichweg", "Otto-Klemperer-Weg", "Feldmeierbogen", 
            "Konrad-Adenauer-Platz", "anotherThing")
patterns = c("weg", "platz")

unique(grep(paste(patterns, collapse="|"), streets, value=TRUE, ignore.case = TRUE))
[1] "Berberichweg"          "Otto-Klemperer-Weg"    "Konrad-Adenauer-Platz"

我认为d_vector某些东西不太d_vector 尝试检查class(d_vector)dput(d_vector)并将其粘贴到此处。

您也可以尝试使用sapply并查看是否可行:

matches =sapply(patterns, function(p) grep(p, streets, value=TRUE, ignore.case = TRUE))
# $weg
# [1] "Berberichweg"       "Otto-Klemperer-Weg"
# 
# $platz
# [1] "Konrad-Adenauer-Platz"

unique(unlist(matches))
# [1] "Berberichweg"          "Otto-Klemperer-Weg"    "Konrad-Adenauer-Platz"

简单方案:

streets = c("Berberichweg", "Otto-Klemperer-Weg", "Feldmeierbogen" , "Altostraße")
streets = tolower(streets) #Lowercase all
names = c("Berber", "Weg")
names = tolower(names)

sapply(names, function (y) sapply(streets, function (x) grepl(y, x)))

#                   berber   weg
#berberichweg        TRUE  TRUE
#otto-klemperer-weg  FALSE TRUE
#feldmeierbogen      FALSE FALSE
#altostraße          FALSE FALSE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM