【问题标题】:Extracting the top match from string comparison in R从R中的字符串比较中提取顶部匹配
【发布时间】:2014-02-15 20:20:43
【问题描述】:

我目前在 data.table 代码中使用带有“lapply”的“agrep”函数将用户提供的 VIN# 列表中的条目链接到 DMV VIN# 数据库。到目前为止,请参阅以下两个链接以获取所有数据/代码:

Accelerate performance and speed of string match in R

Imperfect string match using data.table in R

有没有办法从我生成的列表中提取“最佳”匹配:

dt

因为到目前为止,'agrep' 函数给了我多个匹配项,即使对成本、全部、替换等进行了大量修改。变量。

我也尝试过使用 'adist' 函数而不是 'agrip' 但因为 'adist' 没有像 'agrep' 那样的 value=TRUE 选项,所以它会抛出相同的结果

Error in `[.data.table`(dt, lapply(vin.vins, function(x) agrep(x,car.vins,  : 
x.'vin.vins' is a character column being joined to i.'V1' which is type 'integer'. 
Character columns must join to factor or character columns.

我之前收到的“agrep”。

还有其他我可以使用的包吗?

谢谢!

【问题讨论】:

    标签: r text character string-matching


    【解决方案1】:

    Tom,严格来说,这不是data.table 问题。此外,如果没有您正在使用的数据,很难确切地知道您想要什么。我试图弄清楚你想要什么,我想出了这个解决方案:

    vin.match <- vapply(car.vins, function(x) which.min(adist(x, vin.vins)), integer(1L))
    data.frame(car.vins, vin.vins=vin.vins[vin.match], vin.names=vin.names[vin.match])
    #   car.vins vin.vins vin.names
    # 1  abcdekl   abcdef     NAME1
    # 2   abcdeF   abcdef     NAME1
    # 3  laskdjg  laskdjf     NAME2
    # 4  blerghk  blerghk     NAME3
    

    这是数据:

    vin.vins <- c("abcdef", "laskdjf", "blerghk")
    vin.names <- paste0("NAME", 1:length(vin.vins))
    car.vins <- c("abcdekl", "abcdeF", "laskdjg", "blerghk")
    

    这将根据adistvin.vins 中为car.vins 中的每个值找到最接近的匹配项。我不确定此特定步骤是否需要data.table。如果您提供您的实际数据(或有代表性的样本),那么我可以提供更有针对性的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 2022-03-30
      • 2018-06-08
      • 1970-01-01
      相关资源
      最近更新 更多