2016-07-21 6 views
0

나는 이러한 문자열로 구성된 벡터가 :벡터에 숫자와 문자를 찾기

10I/V/F/R, 16E, 20R/M/T/I, 24I, 32I, 33F/I/V, 36I/L/V,45R, 46I/L/V, 48M/V, 53L, 
54L/M/V, 60E, 63P, 71V/T/I,73C/S/T/A, 82A/F/I/S/T/M/L/C, 84A/C/V,85V, 88D/T/S, 89M/V/Q/T, 90M 

을 그리고 그와 같은 다른이 : 내가 좋아하는 것

10F, 20M, 33F, 82A, 89Q, 93K 

이 확인되는 경우의 각 문자열 내 두 번째 벡터는 첫 번째 벡터에 존재합니다. 이 예에서 첫 번째 5 개는 각 숫자에 대해 연관된 문자가 있기 때문에 사실입니다. 이 경우 일치하는 문자열의 수인 5를 수신하고 싶습니다.

+3

쿨를. 너 뭐 해봤 니? –

+0

여기 제공된 두 가지 아이디어가 효과가 있습니다. –

답변

1

검색 문자열을 정규 표현식으로 변환 한 다음 각각을 대상 벡터와 비교할 수 있습니다. 일치하는 검색 문자열의 수를 원하기 때문에 대상 벡터에서 일치하는 검색 문자열이 몇 개 있는지 파악할 수 있습니다.

sum(lengths(lapply(sub('^([0-9]+)([a-zA-Z])$','^\\1.*\\2',b),grep,a))>0L); 
## [1] 5 

데이터

a <- c('10I/V/F/R','16E','20R/M/T/I','24I','32I','33F/I/V','36I/L/V,45R','46I/L/V','48M/V', 
'53L','54L/M/V','60E','63P','71V/T/I,73C/S/T/A','82A/F/I/S/T/M/L/C','84A/C/V,85V','88D/T/S', 
'89M/V/Q/T','90M'); 
b <- c('10F','20M','33F','82A','89Q','93K'); 
+0

대단히 감사합니다! 그것은 작동합니다! –

1

먼저 우리는 v1의 모든 숫자를 추출하고 l1에 저장하고 우리는 모든 알파를 추출 l2에 저장합니다. 우리는 lst에서 두 가지를 결합하여 mapply()paste0()을 사용합니다. 마지막으로, grepl()의 우리 루프를 통해 v2sum() 모든 일치 TRUE

library(stringi) 

l1 <- stri_extract_all_regex(v1, "[:digit:]+") 
l2 <- stri_extract_all_regex(v1, "[:alpha:]") 
lst <- mapply(function(x, y) paste0(x, y), l1, l2) 

sum(sapply(v2, function(x) grepl(x, lst))) 

를 돌려주는 :

#[1] 5 

데이터

v1 <- c("10I/V/F/R", "16E", "20R/M/T/I", "24I", "32I", "33F/I/V", 
     "36I/L/V", "45R", "46I/L/V", "48M/V", "53L", "54L/M/V", 
     "60E", "63P", "71V/T/I", "73C/S/T/A", "82A/F/I/S/T/M/L/C", 
     "84A/C/V", "85V", "88D/T/S", "89M/V/Q/T", "90M") 

v2 <- c("10F", "20M", "33F", "82A", "89Q", "93K"); 
+0

대단히 고마워! 그것은 작동합니다! –

+0

@ LetíciaRaposo 다행스럽게도 :) –

관련 문제