有一个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
如果两者都是向量,则它可以工作,并且可以扩展为使用多个向量。