2016-07-21 21 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 

私の各文字列かどうかを確認したいと思います第1のベクトルに第2のベクトルが存在する。この例では、最初の5つの数字はそれぞれ対応する文字が存在するため、最初の5つは真です。一致する文字列の数(この場合は5)を回答として受け取りたいと思います。

+3

クールを。何を試しましたか? –

+0

ここで提供されている2つのアイデアが機能しました! –

答えて

1

検索文字列を正規表現に変換し、それぞれをターゲットベクトルに一致させることができます。一致した検索文字列の数が必要なので、ターゲットベクトルに少なくとも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の2つをmapply()paste0()を使用して組み合わせます。最後に、v2sum()オーバー我々ループgrepl()のすべてのマッチが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喜んでそれは助け:) –

関連する問題