當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R findInterval 查找區間數或索引


R語言 findInterval 位於 base 包(package)。

說明

給定 vec 中的非遞減斷點向量,找到包含 x 的每個元素的區間;即,如果 i <- findInterval(x,v) ,對於 x 中的每個索引 j ,其中 N <- length(v) 。在兩個邊界處,返回的索引可能相差 1,具體取決於可選參數 rightmost.closedall.inside

用法

findInterval(x, vec, rightmost.closed = FALSE, all.inside = FALSE,
             left.open = FALSE)

參數

x

數字。

vec

數字,逐漸(弱)排序,長度為 N

rightmost.closed

邏輯性;如果為 true,則最右邊的區間 vec[N-1] .. vec[N] 被視為閉合區間,請參見下文。

all.inside

邏輯性;如果為 true,則返回的索引被強製轉換為 1,...,N-1 ,即 0 映射到 1N 映射到 N-1

left.open

邏輯性;如果為 true,則所有區間都在左側打開並在右側關閉;在下麵的公式中, 應與 交換( 交換),rightmost.closed 表示“最左邊關閉”。這可能很有用,例如在生存分析計算中。

細節

函數 findInterval 查找一個向量 x 在另一個向量 vec 中的索引,其中後者必須是非遞減的。這是微不足道的,相當於 apply( outer(x, vec, `>=`), 1, sum) ,事實上,內部算法使用區間搜索確保 複雜性,其中 n <- length(x) (和 N <- length(vec) )。對於(幾乎)排序的 x ,它會更快,本質上是

這與經驗分布函數的計算相同,實際上, findInterval(t, sort(X)) 相同,其中 的經驗分布函數。

rightmost.closed = TRUE 時,x[j] = vec[N] ( ) 的結果是 N - 1 ,就像最後一個間隔中的所有其他值一樣。

left.open = TRUE 有時有用,例如對於生存數據。出於(反)對稱原因,它相當於使用 “mirrored” 數據,即以下內容始終為真:

    identical(
          findInterval( x,  v,      left.open= TRUE, ...) ,
      N - findInterval(-x, -v[N:1], left.open=FALSE, ...) )
  

其中 N <- length(vec) 如上所述。

長度為 length(x) 的向量,其值在 0:N (和 NA )中,其中 N <- length(vec) ,或者當且僅當 all.inside = TRUE 時強製轉換為 1:(N-1) 的值(等效於強製強製間隔內的所有 x 值)。請注意, NA 是從 x 傳播的,並且 Inf 值在 xvec 中都允許。

例子

x <- 2:18
v <- c(5, 10, 15) # create two bins [5,10) and [10,15)
cbind(x, findInterval(x, v))

N <- 100
X <- sort(round(stats::rt(N, df = 2), 2))
tt <- c(-100, seq(-2, 2, length.out = 201), +100)
it <- findInterval(tt, X)
tt[it < 1 | it >= N] # only first and last are outside range(X)

##  'left.open = TRUE' means  "mirroring" :
N <- length(v)
stopifnot(identical(
                  findInterval( x,  v,  left.open=TRUE) ,
              N - findInterval(-x, -v[N:1])))

作者

Martin Maechler

也可以看看

approx(*, method = "constant")findInterval()ecdf 的泛化,用於計算經驗分布函數(最多 因子)也與 findInterval(.) 基本相同。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Find Interval Numbers or Indices。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。