名称匹配R

时间:2018-11-14 21:43:00

标签: r datatable jaro-winkler

我有2个具有名称的数据集。一个具有确切的名称,另一个具有精确的和修改的名称

dt_t <- data.table(Name = list("Aaron RAMSEY", "Mesut OEZIL", "Sergio AGUERO"))
dt_f <- data.table(Name = list("Özil Mesut", "Ramsey Aaron", "Kun Agüero"))

我当时正在考虑用jarowinkler函数的值(允许计算字符串的相似度)用dt_t行和dt_f行的表格,以便用dt_t [i]代替dt_f [i]具有最高的jarowinkler值。

但是我不知道该怎么做,如果可能的话,少买些东西。

欢迎提出任何想法

谢谢

1 个答案:

答案 0 :(得分:0)

这是使用adist的解决方案:

library(data.table)

dt_t <- data.table(Name = list("Aaron RAMSEY", "Mesut OEZIL", "Sergio AGUERO"))
dt_f <- data.table(Name = list("Özil Mesut", "Ramsey Aaron", "Kun Agüero"))

string_dist <- adist(dt_t$Name, dt_f$Name, partial=TRUE, ignore.case=TRUE)

match_idx <- apply(string_dist, 2, which.min)

dt_match <- cbind(dt_t, dt_f[match_idx])

编辑---------------------------------

逐行应用:

library(data.table)

dt_t <- data.table(Name = (list("Aaron RAMSEY", "Mesut OEZIL", "Sergio AGUERO")))
dt_f <- data.table(Name = list("Özil Mesut", "Ramsey Aaron", "Kun Agüero"))

minDistMatch <- function(x, y){
  x <- as.list(x)
  y <- as.list(y)
  y[which.min(adist(x, y, partial=TRUE, ignore.case=TRUE))]
  }

dt_t[, Match := vapply(Name, minDistMatch, list(1L), dt_f$Name)]