有一个R函数来查找向量中元素的索引吗?

在R中,我有一个元素x和一个向量v 。 我想findv中等于x的元素的第一个索引。 我知道一个办法是: which(x == v)[[1]] ,但这似乎过分低效。 有没有更直接的方法来做到这一点?

对于奖励积分,是否有一个函数,如果x是一个向量? 也就是说,它应该返回一个索引向量,指示v中每个元素的位置。

函数match适用于vector:

 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%只要第一个参数返回一个逻辑向量,如果可以在第二个参数中find该值,则返回TRUE ,否则返回FALSE

funprog {base}中的函数Position也可以完成这个工作。 它允许你传递一个任意的函数,并返回第一个或最后一个匹配。

Position(f, x, right = FALSE, nomatch = NA_integer)

R用一种在vector大海捞针中find针的索引的方法重载了double equals ==操作符。 它产生一个logical向量,包含干草堆中每个匹配的TRUE值。

例:

 haystack <- c(1, 2, 4, 3, 4) needle <- 4 indices <- needle == haystack indices [1] 3 5 haystack[indices] [1] 4 4 

如果两者都是向量,则它可以工作,并且可以扩展为使用多个向量。