在向量中查找大于X的第一个值的位置

时间:2015-04-01 10:23:36

标签: r vector position max

在R中:我有一个向量,想要找到第一个值大于100的位置。

6 个答案:

答案 0 :(得分:28)

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

min(which(v > 100))

答案 1 :(得分:23)

基于whichmax的大多数答案都很慢(特别是对于长向量),因为它们遍历整个向量:

  1. x>100评估向量中的 每个 值,看它是否与条件匹配
  2. whichmax / min搜索所有在步骤1中返回的索引并找到最大值/最小值
  3. Position只会评估条件,直到遇到第一个TRUE值并立即返回相应的索引,而不会继续通过向量的其余部分。

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

答案 2 :(得分:12)

结帐which.max

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

答案 3 :(得分:4)

简而言之,Hadley Wickham已经实现了一个函数detect_index,可以在他的purrr函数编程包中完成这项任务。

我最近自己使用了detect_index,并将其推荐给遇到同样问题的其他人。

detect_index的文档可在此处找到:https://rdrr.io/cran/purrr/man/detect.html

答案 4 :(得分:0)

有很多解决方案,另一个是:

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

答案 5 :(得分:-1)

假设值是你的向量。

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