Если вы действительно хотите «... уделять больше внимания точности подстрок и их последовательности ...», то эта функция может работать, так как она проверяет, является ли строка подстрокой другой:
library(data.table)
x <- c("A&A PRECISION", "A&A PRECISION ENGINEERING", "B&B PRECISION")
y <- x
Мы хотим расширить сетку. Для этого я бы использовал функцию CJ
в data.table
. Затем мы проверим каждую пару и посмотрим, является ли x подстрокой y (это не работает наоборот):
CJ(x, y)[, similarity := apply(.SD, 1, function(x) x[2] %like% x[1]), .SDcols = c("x", "y")][x != y, ]
x y similarity
1: A&A PRECISION A&A PRECISION ENGINEERING TRUE
2: A&A PRECISION B&B PRECISION FALSE
3: A&A PRECISION ENGINEERING A&A PRECISION FALSE
4: A&A PRECISION ENGINEERING B&B PRECISION FALSE
5: B&B PRECISION A&A PRECISION FALSE
6: B&B PRECISION A&A PRECISION ENGINEERING FALSE
Имейте в виду, что вам нужно убедиться, чтостроки работают настолько аккуратно, насколько это возможно, и даже в этом случае это может не сработать.
Есть некоторые вещи, которые я проверю, чтобы очистить ваши строки:
- Удалить несколько пробелов,
- Удалять пробелы в начале / конце строки
- Обеспечивать одинаковую кодировку
- Гарантировать одинаковый CASE
Этого можно добиться с помощьюstringi
пакет.