检查间隔包含R中的数字

时间:2012-03-24 22:32:33

标签: r confidence-interval

在R中,我有以下matrix(每行表示从相同样本数据生成的自举95%置信区间):

       low   high
[1,]   22.2  25.5
[2,]   23.1  25.9
[3,]   23.4  26.1
...

我知道数据的真实总体平均值,它是23.3。所以前两个包括真正的意思,但第三个没有。

在R中,我希望运行for循环inrow(matrix)次,每次i检查数据的真实总体均值是否在特定间隔,如果间隔包含真实均值,则返回nrow(matrix)的{​​{1}}高度的列向量,否则返回TRUE

我怎么能这样做?

4 个答案:

答案 0 :(得分:13)

您可以直接在矩阵列上使用不等式运算符。所以我会简单地完成:

> cbind( mat[,1] <= 23.3 & mat[,2] >= 23.3 )

      [,1]
[1,]  TRUE
[2,]  TRUE
[3,] FALSE

答案 1 :(得分:6)

 mat <- matrix(c(22.2,  25.5,
    23.1 , 25.9,
    23.4,  26.1), ncol=2, byrow=TRUE)
 trueval <- 23.3
 apply(mat, 1, findInterval, x=trueval)
#[1] 1 1 0
 which( apply(mat, 1, findInterval, x=trueval) == 1)
#[1] 1 2
  apply(mat, 1, findInterval, x=trueval) == 1
#[1]  TRUE  TRUE FALSE

答案 2 :(得分:5)

仅供记录,使用 data.table 包中的between也可以轻松实现。

data.table::between(23.3, mat[, 1], mat[, 2])
## [1]  TRUE  TRUE FALSE

答案 3 :(得分:0)

如果您的数据以零为中心,有一种快速的方法,

Zero.included = apply(mat,1,function(x){prod(sign(x))<=0})

如果您的矩阵不以均值为中心,只需添加new.mat=mat-23.3