2017-10-25 9 views
0

ベクトル(b)の要素とベクトル(a)の要素を一致させようとしています。ベクトル(a)の1つの要素を終了させます。解は、(a)の一致のインデックスを含む長さ(b)のベクトルを返す必要があります。R要素内のどこかの2つのベクトルの2つの要素の部分文字列一致

ので、例えば:

a<-c('R2','R3','N_3','R1') 

b<-c('sp_one_R1', 'sp_one_N_3', 'sp_two_R3') 

some.function(a,b) 

should give: 
[1] 4 3 2 

私はlapply pmatchとgrep +を調査してきましたが、解決策を見つけることができません。私はまた、(b)の要素を '_'に分割することも考えましたが、この文字は(a)の要素にも現れるので、機能しません。

ご迷惑をおかけして申し訳ありません。 purrrから安全map_dblタイプを使用

答えて

1

を取得sapplyを使用して:

max.col(sapply(a, grepl, b)) 
#[1] 4 3 2 

コアsapplyの部分がこの行列を返すため、これは機能します。

sapply(a, grepl, b) 
#  R2 R3 N_3 R1 
#[1,] FALSE FALSE FALSE TRUE 
#[2,] FALSE FALSE TRUE FALSE 
#[3,] FALSE TRUE FALSE FALSE 
1

(ジェニーBCによってチュートリアルのlink)Iは、値が一致した見てmax.colを使用し、その後、基地Rで

a<-c('R2','R3','N_3','R1') 
b<-c('sp_one_R1', 'sp_one_N_3', 'sp_two_R3') 

myfun <- function(source_vec, dest_vec) { 
    purrr::map_dbl(source_vec, ~ which(stringr::str_detect(., dest_vec))[1]) 
} 
myfun(b, a) # 4 3 2 
関連する問題