2017-12-12 13 views
0

ベクトルの各項目に関数(長さの異なる2つの引数を取る)を適用する必要があります。この関数は、第2引数の文字で終わる最初の引数の値をルックアップし、インデックスを出力します(目的はファジィ結合を使用して2つのテーブルに対して左結合を実行することですが、regex_left_joinがクラッシュしてこれが回避策)。RベクトルにendsWithを使って関数を適用する

例入力:

x <- c("492820UA665110", "492820UA742008", "493600N077751", "671884RB25355") 
    y <- c("RB25355", "S56890") 

が機能:

idx_endsWith <- function(.x, .y) { 
     return(ifelse(length(which(endsWith(.x, .y))) == 1, 
       which(endsWith(.x, .y)), 
       NA)) 
    } 

したがって、たとえば、

> idx_endsWith(x, y[1]) 
[1] 4 

私はループを使用せずに、Yの各要素には、この機能を適用するにはどうすればよいですか?私は関数をベクトル化する必要がありますが、ベクトルは同じ長さにする必要があるので、mapplyは機能しません。私はdplyrのソリューションを探しています。 dplyrについては

+0

それはあなたが6つの文字で振り返るならば、あなたは、それが例えば...振り返るべきかまでさかのぼる文字列に指定した場合に役立つだろう、 'B25355'、' x'のマッチはTRUEです。つまり、1文字の一致で十分ですか? 2,3,4、 – CPak

答えて

0

、あなたが要求したように、これは動作するはずです:

data.frame(y, stringsAsFactors = FALSE) %>% 
    rowwise %>% 
    mutate(index = idx_endsWith(x, y)) 
関連する問題