У меня есть два dataframes, с двумя символьными векторами различной длины, которые я хотел бы, чтобы соответствовать, например, так:Подмножество с использованием grep для включения levenshtein distance?
company.a <- c("heinz", "hawkings mcgill", "heinz ketchup", "heinz vinegars", "davis and smith", "dell computers", "dell", "O organics", "organics")
company.b <- c("heinz", "hawkings-mcgill", "oyster bay", "company x", "dell")
Я хотел бы сравнить company.b к company.a, возвращая вектор, содержащий элемент от company.b, который был сопоставлен с company.a. Я попытался с помощью следующего кода для подмножества тем больше фрейм
match.comp <- subset(company.a, grep(paste(company.b, collapse = "|"), company.a, value = TRUE)).
Однако то, что я получаю в ответ ошибка о том, «подмножество» должно быть логичным. Я хотел бы следующий результат:
match <- c("heinz", "hawkings mcgill", "heinz", "heinz", "FALSE", "dell", "dell", FALSE, FALSE)
Учитывая ошибки, очевидно, я что-то о Grep или подмножестве отсутствует. У меня есть два вопроса:
Является ли grep лучшим способом для этого? Или есть другой способ? Я знаю о точном сопоставлении, используя подход (A% in% B), но я не могу гарантировать, что строки будут точными совпадениями.
Grep вернет первое совпадение, но есть ли способ извлечь все возможные совпадения, которые были рассмотрены через, скажем, расстояние levenshtein? Я знаю функцию adist в пакете utils, но я хочу знать, можно ли комбинировать ее с grep.
Любая помощь или совет были бы очень признательны. Благодарю.
'agrep'? Ваш желаемый результат неясен. – alistaire
@alistaire спасибо. agrep выглядит хорошо. я хочу вернуть согласованные элементы, если они работают, а если нет, логическое значение. это яснее? – jvalenti