2011-09-23 11 views
19

私が最初に第二のインデックスを返したいのですが、私はこれが重複していると思うだろうが、私はので、ここでは行くことを見つけることができません...あるベクトルの値のインデックスを別のベクトルで取得しますか?

:私はことを保証

first = c("a" , "c" , "b") 
second = c("c" , "b" , "a") 
result = c(2 , 3 , 1) 

第1と第2は一意の値を持ち、その間で同じ値を持ちます。

答えて

30

値のインデックスを取得するのはmatch()です。

first = c("a" , "c" , "b") 
second = c("c" , "b" , "a") 
match(second, first) 
[1] 2 3 1 
+0

mdsummer - ありがとう! 2番目の部分は質問ではありませんでしたが、私は問題の境界を明記していました。あなたのソリューションは素晴らしい作品です! – SFun28

+0

w00te:Rソースでは、[R] \ src \ library \ base \ R \ match.Rと[R] \ src \ main \ match.c – mdsumner

+0

明確な質問、明確な答え!それは非常に素晴らしく、非常にまれな例です! :-) +1 +1 – TMS

3

パターンに基づいてベクトルの要素を選択するという問題を解決しました。ベクトル 'a'があり、ベクトル 'b'の出現を探したいとします。乗算検索パターンによるデータテーブルのフィルタリングに使用できます。

a=c(1, 1, 27, 9, 0, 9, 6, 5, 7) 
b=c(1, 9) 

match(a, b) 
[1] 1 1 NA 2 NA 2 NA NA NA 

だから、これは本当に有用ではありません。 %でバイナリ演算子%を適用すると、より便利である:

a %in% b 
[1] TRUE TRUE FALSE TRUE FALSE TRUE FALSE FALSE FALSE 

a[a %in% b] 
[1] 1 1 9 9 

実は%で一致()ヘルプ%から()関数の試合の周りだけのラップです:

"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0 
関連する問題