Поиск индекса внутри вектора, удовлетворяющего условию

Я ищу условие, которое вернет индекс вектора, удовлетворяющего условию.

Например, У меня есть вектор b = c(0.1, 0.2, 0.7, 0.9) Я хочу знать первый индекс b, для которого говорят b > 0,65. В этом случае ответ должен быть 3

Я попробовал which.min(subset(b, b > 0.65)) Но это дает мне 1 вместо 3.

Пожалуйста, помогите

Ответы

Ответ 1

Используйте which и возьмите первый элемент результата:

which(b > 0.65)[1]
#[1] 3

Ответ 2

Вы можете использовать which.max:

which.max(b > 0.65)
# [1] 3

От ?which.max: "Для логического вектора x, [...] which.max(x) верните [s] индекс первого [...] TRUE

b > 0.65
# [1] FALSE FALSE  TRUE  TRUE

Вы также должны посмотреть на результат своего кода subset(b, b > 0.65), чтобы понять, почему он не может дать желаемый результат.

Ответ 3

Будьте осторожны, which.max неверно, если условие никогда не выполняется, оно не возвращает NA:

> a <- c(1, 2, 3, 2, 5)
> a >= 6
[1] FALSE FALSE FALSE FALSE FALSE
> which(a >= 6)[1]
[1] NA  # desirable
> which.max(a >= 6)
[1] 1   # not desirable

Почему? Когда все элементы равны, which.max возвращает 1:

> b <- c(2, 2, 2, 2, 2)
> which.max(b)
[1] 1

Примечание: FALSE < ИСТИНА