2016-03-31 2 views
2

Я хотел бы найти совпадение строк с количеством символов, которые соответствуют началу. У меня две строки a <- "ABCDBADCABC", b <- "ABC". Я хочу найти матч b в a. Мне интересно узнать, существует ли b <- "ABC" в начале a <- "ABCDBADCABC". Я не ищу другие местоположения строки, отличные от start.Алгоритмы строковых совпадений в R

Другой пример:b <- ABCDBADCABC, a <- "ABCDAB", здесь только четыре символов a матча с b с самого начала. Таким образом, выход будет ABCD матч от a. Что можно сделать в R для этого.

ответ

4

Я хотел бы держать его простым и сделать a и b векторы содержат отдельные символы. Тогда соответствие строк прямолинейно.

## Make a and b 
b = "ABCDBADCABC" 
a = "ABCDAB" 

Найти длину кратчайшего вектора

min_char = min(nchar(a), nchar(b)) 

Затем разделить a и b до

a_split = strsplit(substr(a,1, min_char), "")[[1]] 
b_split = strsplit(substr(b,1, min_char), "")[[1]] 

Сравнить с использованием стандартных операторов

comp = a_split == b_split 

Найти первое вхождение FALSE

which.min(comp) - 1 

С меньшим количеством кода:

compare(a, b) 

где

compare = function(a, b) { 
    min_char = min(nchar(a), nchar(b)) 
    a_split = strsplit(substr(a,1, min_char), "")[[1]] 
    b_split = strsplit(substr(b,1, min_char), "")[[1]] 
    comp = a_split == b_split 
    which.min(comp) - 1 
} 
+0

Спасибо за ваш ответ. Разве нет ничего с меньшим кодом. –

+0

Что теперь? – csgillespie

+3

Если вы хотите меньше кода, вы можете попробовать свою удачу, разместив это на http://codegolf.stackexchange.com/. SO не предназначен для более коротких кодовых конкурсов. –

Смежные вопросы