Найти положение первого значения больше X в векторе

В R: у меня есть вектор и вы хотите найти позицию первого значения, которое больше 100.

Ответ 1

# Randomly generate a suitable vector
set.seed(0)
v <- sample(50:150, size = 50, replace = TRUE)

min(which(v > 100))

Ответ 2

Большинство ответов на основе which и max являются медленными (особенно для длинных векторов), поскольку они повторяются по всему вектору:

  1. x>100 оценивает каждое значение в векторе, чтобы увидеть, соответствует ли оно условию
  2. which и max/min ищут все индексы, возвращенные на шаге 1. и находят максимум/минимум

Position будет оценивать условие только до тех пор, пока не встретит первое значение ИСТИНА и немедленно вернет соответствующий индекс, не продолжая до конца вектора.

# Randomly generate a suitable vector
v <- sample(50:150, size = 50, replace = TRUE)

Position(function(x) x > 100, v)

Ответ 3

Отъезд which.max:

x <- seq(1, 150, 3)
which.max(x > 100)
# [1] 35
x[35]
# [1] 103

Ответ 4

Как раз упомянуть, Хэдли Уикхэм реализовал функцию detect_index, чтобы выполнить именно эту задачу в своем пакете purrr для функционального программирования.

Недавно я использовал detect_index сам и рекомендовал бы его кому-либо еще с той же проблемой.

Документацию для detect_index можно найти здесь: https://rdrr.io/cran/purrr/man/detect.html

Ответ 5

Существует много решений, другое:

x <- 90:110
which(x > 100)[1]

Ответ 6

Предполагая, что это ваш вектор.

 firstGreatearThan <- NULL
  for(i in seq(along=values)) { 
    if(values[i] > 100) {
       firstGreatearThan <- i
       break
    }
 }