【问题标题】:Is there any way to replicate Rstudio's integrated search function as a code?有没有办法将 Rstudio 的集成搜索功能复制为代码?
【发布时间】:2018-03-31 14:34:45
【问题描述】:

关于上下文,我今天早些时候问了一个问题,关于使用 stringdist 包中的“stringdist”函数将具有各种变体的公司名称与包含许多不同公司名称的大列表进行匹配,以便识别其中的公司大名单。 This is the question I asked.

不幸的是,我无法对我的代码进行任何改进,这就是为什么我开始远离 stringdist 并尝试一些完全不同的东西。

我使用的是 Rstudio,我注意到该程序中的内部搜索功能更有效:

如图所示,只需在右上角搜索公司名称即可得到我正在寻找的输出,例如较长的名称“AMMINEX EMISSIONS...”和“AMMINEX AS” .

但是,在我之前尝试使用 stringdist 函数时(请参阅我之前问题的链接),我会得到类似“LAMINEX”的结果,这些结果根本不相关,但会出现在更有用的匹配之前:

因此,在我的情况下,使用 Rstudio 使用的算法似乎效率更高,但是我不太确定是否可以以代码形式复制此算法,而不必手动搜索每家公司。

假设我有一个如下所示的数据框:

Company_list <- data.frame(Companies=c('AMMINEX', 'Microsoft', 'Apple'))

对我来说,有什么方法可以同时搜索所有 3 家公司并在数据框中获得相同类型的结果,就像 Rstudio 在第一张图片中所做的那样?

【问题讨论】:

    标签: r rstudio


    【解决方案1】:

    根据您对哪些结果是好还是坏的描述,听起来您喜欢子字符串的精确匹配,而不是那些距离度量上接近的东西。这种情况下你可以模仿Rstudio的搜索功能用grepl

    library(tidyverse)
    demo.df <- data.frame(name = paste(rep(c("abc","jkl","xyz"), each=4), sample(1:100,4*3)), limbs=1:4*3)
    demo.df%>%filter(grepl('abc|xyz',name))
    

    grepl 模式字符串中的管道表示“或”,让您可以同时搜索多个公司。因此,要从示例数据框中搜索名称,此字符串将为 paste0(Company_list$Companies,collapse="|") 这就是您所追求的吗?

    【讨论】:

    • 感谢您的建议!是的,这就是我想做的。我也用 grep 进行了一些挖掘,然后得出了这个命令: greptest
    • 返回值不同。 grepl 返回逻辑值,一个真/假向量,含义为匹配/不匹配。 grep 通常返回匹配索引的向量,但 value=TRUE 则返回这些索引处的值。这些都是在不同情况下有用的东西。我在这里使用了真/假值的向量,因为这很方便传递给过滤器。
    猜你喜欢
    • 2021-04-30
    • 2011-02-27
    • 2021-07-05
    • 2017-11-24
    • 2016-12-25
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多