2014-02-21 4 views
1

У меня есть набор данных, как ниже -Grab, если строка содержит определенное количество

> a_i 
[1] "Our-Facebook-Page/td-p/3175990"       
[2] "Our-Facebook-Page/td-p/3175990/page/2" 
    ....  
[17] "Data-duplicate-files/td-p/4743405"     
[18] "Data-duplicate-files/td-p/4743405/page/2"    
[19] "Subscription-Release-1-sucks/td-p/4556739"  
[20] "Subscription-Release-1-sucks/td-p/4556739/page/2" 

> b_i 
[1] "Data-duplicate-files/td-p/4743405"     
[2] "Subscription-Release-1-sucks/td-p/4556739" 
[3] "Quick-fix/td-p/4556740" 

Моя цель состоит в том, чтобы найти 7 цифр номера, который существует только в B_i (например, 4743405, 4556739, 4556740) и захватить данные из a_i, содержащие соответствующие числа. Таким образом, окончательный вывод будет что-то вроде этого -

[1] "Data-duplicate-files/td-p/4743405"     
[2] "Data-duplicate-files/td-p/4743405/page/2"    
[3] "Subscription-Release-1-sucks/td-p/4556739"  
[4] "Subscription-Release-1-sucks/td-p/4556739/page/2"" 

Я могу получить номера с помощью strsplit (b_i, «/»), но я застрял в захвате списков, который содержит соответствующие номера. Будет ли какой-нибудь элегантный способ сопоставить эти числа и захватить списки?

ответ

3

Ваши данные не воспроизводимым формате, так что я не пробовал, но это занимает несколько иной подход, чем IShouldBUyABoat, просто соблюдение правила 7-значный, чтобы идентифицировать номера:

sapply(regmatches(b_i,regexpr("[[:digit:]]{7}", b_i)), 
     function(x) a_i[grepl(x, a_i)]) 
+0

Спасибо! Я пробовал это, и он работает очень хорошо! – user1486507

5
a_i[grep(paste(gsub("(^.+/)([[:digit:]])(/.+$)", "\\2", b_i), 
       collapse="|"), 
    a_i)] 
[1] "Data-duplicate-files/td-p/4743405"    
[2] "Data-duplicate-files/td-p/4743405/page/2"   
[3] "Subscription-Release-1-sucks/td-p/4556739"  
[4] "Subscription-Release-1-sucks/td-p/4556739/page/2" 

Это конструкция связки цифр, разделенных знаком трубы, чтобы сформировать шаблон greppish-OR. Если вы хотите применить правило 7 цифр, вы можете поставить {} повторение квантификатора. На данный момент он будет принимать любое количество цифр между косой чертой.

+0

Спасибо! Отлично работает!! – user1486507

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