簡體   English   中英

是否有 R function 用於查找向量中元素的索引?

[英]Is there an R function for finding the index of an element in a vector?

在 R 中,我有一個元素x和一個向量v 我想找到v中等於x的元素的第一個索引。 我知道這樣做的一種方法是: which(x == v)[[1]] ,但這似乎效率極低。 有沒有更直接的方法呢?

對於獎勵積分,如果x是向量,是否有 function 有效? 也就是說,它應該返回一個索引向量,指示vx的每個元素的 position。

函數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僅根據您的要求返回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]]

是的,我們可以找到向量中元素的索引,如下所示:

> a <- c(3, 2, -7, -3, 5, 2)
> b <- (a==-7)  # this will output a TRUE/FALSE vector
> c <- which(a==-7) # this will give you numerical value
> a
[1]  3  2 -7 -3  5  2
> b
[1] FALSE FALSE  TRUE FALSE FALSE FALSE
> c
[1] 3

這是在向量中查找元素索引的最有效方法之一。

R用一種在向量干草堆中查找針的索引的方法使double equals ==運算符超載。 它產生一個logical向量,其中包含TRUE中每個匹配項的TRUE值。

例:

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

如果兩者都是向量,則可以使用,也可以擴展為使用多個向量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM