当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。