是否有R函数用于查找向量中元素的索引?

在R中,我有一个元素
x
和一个向量
v
。我想在
v
中找到一个等于
x
的元素的第一个索引。我知道这样做的一种方法是:
which(x == v)[[1]]
,但这似乎效率过低。有更直接的方法吗? 对于奖励积分,是否有一个功能,如果
x
是一个向量?也就是说,它应该返回一个索引向量,表示
v
中每个元素的位置。     
已邀请:
函数
match
适用于向量:
x <- sample(1:10)
x
# [1]  4  5  9  3  8  1  6 10  7  2
match(c(4,8),x)
# [1] 1 5
match
仅按照您的要求返回匹配的第一次遭遇。它返回第一个参数中值的第二个参数中的位置。 对于多重匹配,
%in%
是要走的路:
x <- sample(1:4,10,replace=TRUE)
x
# [1] 3 4 3 3 2 3 1 1 2 2
which(x %in% c(2,4))
# [1]  2  5  9 10
%in%
只要第一个参数返回逻辑向量,如果在第二个参数中找到该值,则返回
TRUE
,否则返回
FALSE
。     
funprog {base}中的函数
Position
也可以完成这项工作。它允许您传递任意函数,并返回第一个或最后一个匹配。
Position(f, x, right = FALSE, nomatch = NA_integer)
    
关于上述方法效率的小说明:
 library(microbenchmark)

  microbenchmark(
    which("Feb" == month.abb)[[1]],
    which(month.abb %in% "Feb"))

  Unit: nanoseconds
   min     lq    mean median     uq  max neval
   891  979.0 1098.00   1031 1135.5 3693   100
   1052 1175.5 1339.74   1235 1390.0 7399  100
所以,最好的是
    which("Feb" == month.abb)[[1]]
    
R使用一种在向量干草堆中找到针的索引的方法重载了双等于
==
算子。它产生一个
logical
向量,包含大海捞针中每个匹配的
TRUE
值。 例:
haystack <- c(1, 2, 4, 3, 4)
needle <- 4
indices <- needle == haystack
indices
[1] 3  5
haystack[indices]
[1] 4  4
如果两者都是向量,则它可以工作,并且可以扩展为使用多个向量。     

要回复问题请先登录注册