2016-07-06 12 views
0

私は異なる次元の2つの文字ベクトルa、bを持っています。私は各要素をaにとり、bのすべての要素と比較して、近くに一致する要素があるかどうかを調べる必要があります。一致のために私はagrepl関数を使用しています。サンプルデータが異なる次元の2つのベクトルをループするR

a <- c("US","Canada","United States","United States of America") 
b <- c("United States","U.S","United States","Canada", "America", "Spain") 

続いている後

は私が一致するために使用しているコードです。 agreplの第2引数はそう長さ> = 1のベクトルを受け入れるので、あなたは、二重のループを必要としない

for(i in 1:4) 
{ 
    for(j in 1:6) 
    { 
     bFlag <- agrepl(a[i],b[j], max.distance = 0.1,ignore.case = TRUE) 

     if(bFlag) 
     { 
     #Custom logic 
     } 
     else 
     { 
     #Custom logic 
     } 
    } 
} 

答えて

0

それぞれ私の実際のデータは、より多くの900と5000の記録を持っているとして、forループを避けるために、どのように私を助けてくださいあなたは、必要に応じてlapplyコール内のいくつかのカスタム・ロジックを追加することができますが、私はちょうどlogical秒のリストとして出力を残しておきますので、それは問題で指定されていない

lapply(a, function(x) agrepl(x, b, max.distance = 0.1, ignore.case = TRUE)) 
# [[1]] 
# [1] TRUE TRUE TRUE FALSE FALSE TRUE 
# 
# [[2]] 
# [1] FALSE FALSE FALSE TRUE FALSE FALSE 
# 
# [[3]] 
# [1] TRUE FALSE TRUE FALSE FALSE FALSE 
# 
# [[4]] 
# [1] FALSE FALSE FALSE FALSE FALSE FALSE 

:あなたのような何かを行うことができます。あなたが唯一の最初のTRUEのインデックスをしたい場合は

lapply(a, function(x) agrep(x, b, max.distance = 0.1,ignore.case = TRUE)) 

# [[1]] 
# [1] 1 2 3 6 
# 
# [[2]] 
# [1] 4 
# 
# [[3]] 
# [1] 1 3 
# 
# [[4]] 
# integer(0) 

、あなたが使用することができます:

sapply(a, function(x) agrep(x, b, max.distance = 0.1,ignore.case = TRUE)[1]) 
# US     Canada   United States United States of America 
# 1      4      1      NA 
+0

は、あなたの代わりに論理名の(TRUEsの)インデックスは、あなたがagreplの代わりにagrepを使用することができますしたい場合ありがとうございました...!!!私はそれが真であれば、ベクトルbの対応する要素のインデックスを期待しています。最初の真のインデックスで十分です – Naveen

+0

@Naveen、インデックスを使用したい場合は、例で 'agrepl'の代わりに' agrep'を使用してください –

関連する問題