Я ищу функцию (назовем ее scramblematch
), которая может сделать следующее.R: указать, существует ли подстрока в другой строке
query='one five six'
target1='one six two six three four five '
target2=' two five six'
scramblematch(query, target1)
возвращает TRUE
и
scramblematch(query, targ2)
возвращает FALSE
Пакет stringdist
может быть то, что мне нужно, но я не знаю, как использовать его.
Update1
Используйте случай для функции Я ищу: У меня есть набор данных с введенными данными постепенно на протяжении многих лет. Значения для одного текстового поля (textfield
) набора данных не стандартизированы, поэтому люди вступили по-разному. Теперь я хочу очистить эти данные, используя стандартизованный набор значений для textfield
. Все те значения, которые описывают одни и те же вещи разными формулировками, заменяются стандартизованными значениями. Например (я делаю это):
В моем стандартизованном выборе значений (назовем это lookupfactors
), у меня есть lookupfactors=c('liver disease', 'and more')
. В textfield
я следующие строки:
liver cancer disease
some other thing
male, liver fibrosis disease
yet another thing
failure of liver, disease
Хочу в конечном итоге, чтобы иметь строку 1, 3 и 5 (потому что они имеют «печень» и «заболевание» в содержании) должны быть заменены от liver disease
. Здесь я предполагаю, что люди, которые ввели данные, не знают точного термина, но они знают ключевые слова, чтобы выразить это. Поэтому слова в значениях lookupfactors
являются подстрокой/подмножеством в textfield
.
Вы хотите проверить, отображается ли каждое слово в 'query' в целевой строке? Если это так, вы можете попробовать «Уменьшить» («&», lapply (strsplit (query, «») [[1]], grepl, c (target1, target2))). – nicola
Очень хорошая демонстрация 'Уменьшить'. Использование «Уменьшить» - вот что мне нужно: «Уменьшить (« & », lapply (strsplit (query,« ») [[1]], grepl, target1))' и 'Уменьшить (" & ", lapply (strsplit (query, "") [[1]], grepl, target2)) '. Спасибо. Но мне интересно, есть ли другой более быстрый метод. – biocyberman
Вам не нужны отдельные вызовы, если вам нужна скорость. Просто создайте вектор целевых строк и используйте мою строку. Думаю, это должно быть достаточно быстро. – nicola