2011-09-23 56 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 
相关问题