как получить процентное совпадение символов между двумя строками, используя sqldf в R - PullRequest
0 голосов
/ 28 февраля 2019

Я хочу получить процентное совпадение символов между двумя строками / двумя столбцами, состоящими из имен в моем фрейме данных.Если ниже может быть достигнуто с помощью sqldf, это будет полезно.Ниже приведен пример, которого я хочу достичь в одном из моих столбцов кадра данных.

FAYE по сравнению с FAYE2

будет составлять 90%

Приведенная ниже формулаиспользуется:

всего символов (с добавлением длины 1-й и 2-й строки) = 9 совпадающих символов, умноженных на 2, деленных на общее количество символов = (4 x 2) / 9 *** мы умножаем соответствующие символы на 2, так как есть2 строки 8/9 = 88,88% или 90%

Спасибо

1 Ответ

0 голосов
/ 28 февраля 2019

Мы предполагаем из примера в вопросе, что мы хотим определить, является ли первая строка подстрокой второй строки или наоборот, и, если это так, сообщают соотношение их длин и сообщают 0 в противном случае.Также соотношение длин в примере составляет 100 * 4/5 = 80%, а не 90%, как показано в вопросе.

# test data
DF <- data.frame(string1 = c("FAYE", "FAYE2", "X"), 
                 string2 = c("FAYE2", "FAYE", "FAYE"), stringsAsFactors = FALSE)

library(sqldf)

sqldf("select *, 
  max(100.0 * (instr(string2, string1) > 0) * length(string1) / length(string2),
      100.0 * (instr(string1, string2) > 0) * length(string2) / length(string1))
      percent from DF")

, давая:

  string1 string2 percent
1    FAYE   FAYE2      80
2   FAYE2    FAYE      80
3       X    FAYE       0
...