Добавьте еще один дубликат, чтобы показать, что он работает с несколькими дубликатами.
pres <- c(" Obama, B.","Bush, G.W.","Obama, B.H.","Clinton, W.J.", "Bush, G.")
adist показывает расстояние между двумя символьными векторами
adist(" Obama, B.", pres)
# [,1] [,2] [,3] [,4] [,5]
# [1,] 0 9 3 10 7
Например, чтобы выбрать ближайшую строку к " Obama, B."
, вы можете выбрать ту, которая имеет минимальное расстояние. Чтобы избежать идентичной строки, я взял только расстояния больше нуля:
d <- adist(" Obama, B.", pres)
pres[min(d[d>0])]
# [1] "Obama, B.H."
Чтобы получить уникальные имена с учетом орфографических ошибок и несоответствий, вы можете сравнить каждую строку со всеми предыдущими. Затем, если есть подобный, удалите его. Я создал keepunique()
функцию, которая выполняет это. keepunique()
затем применяется ко всем элементам вектора последовательно с Reduce()
.
keepunique <- function(previousones, x){
if(any(adist(x, previousones)<5)){
x <- NULL
}
return(c(previousones, x))
}
Reduce(keepunique, pres)
# [1] " Obama, B." "Bush, G.W." "Clinton, W.J."