Интервал проверки содержит число в R - PullRequest
4 голосов
/ 25 марта 2012

В R у меня есть следующее matrix (каждая строка представляет 95% доверительный интервал начальной загрузки, сгенерированный из тех же данных выборки):

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

Я знаю истинное среднее значение данных, это 23,3. Итак, первые два включают истинное среднее, а третье - нет.

В R я хочу запустить цикл for от i до nrow(matrix) раз, каждый i проверяет, находится ли истинное среднее значение данных в этом конкретном интервале, а затем возвращает вектор столбца высоты nrow(matrix) из TRUE, если интервал содержит истинное среднее значение, и FALSE в противном случае.

Как я мог это сделать?

Ответы [ 4 ]

14 голосов
/ 25 марта 2012

Вы можете просто использовать операторы неравенства непосредственно в столбцах матрицы. Так что я бы просто сделал:

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

      [,1]
[1,]  TRUE
[2,]  TRUE
[3,] FALSE
6 голосов
/ 15 декабря 2016

Только для записи, этого также легко добиться, используя between из пакета data.table .

data.table::between(23.3, mat[, 1], mat[, 2])
## [1]  TRUE  TRUE FALSE
6 голосов
/ 25 марта 2012
 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
0 голосов
/ 20 октября 2015

Существует быстрый способ сделать это, если ваши данные центрированы на нуле,

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

, если ваша матрица не центрирована относительно среднего, просто добавьте new.mat=mat-23.3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...