gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:43:10 24 4
gpt4 key购买 nike

我在 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 变成包含一个长字符串,用| 分隔。正则搜索:
  • result <- unique(grep(paste(d_vector, collapse="|"), muc$Name, value=TRUE, ignore.case = TRUE))
    result

    但结果返回所有街道名称。
  • 我也尝试使用 agrep,它重新调整了 Out of memory -错误。
  • 当我尝试 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 的东西不太合适.尝试检查 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"

    关于r - 在 R 中查找两个向量之间的匹配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38371321/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com