2011-09-23 58 views
19

我想這是一個重複的,但我不能找到所以這裏去...獲取另一個向量的值的索引?

我想回到第二的指數第一:

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

我保證第一個和第二個具有唯一的值,並且兩者之間的值相同。

回答

30

獲取值的索引是match()的用途。

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

mdsummer - 謝謝!第二部分不是一個問題,我只是指出了一些問題的界限(編輯以便更清楚)。你的解決方案效果很好 – 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 

所以match()在這裏並不真正有用。在運用%二進制運算符%是更方便:

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 
相關問題