在R中:我有一个向量,想要找到第一个值大于100的位置。
答案 0 :(得分:28)
# Randomly generate a suitable vector
set.seed(0)
v <- sample(50:150, size = 50, replace = TRUE)
min(which(v > 100))
答案 1 :(得分:23)
基于which
和max
的大多数答案都很慢(特别是对于长向量),因为它们遍历整个向量:
x>100
评估向量中的 每个 值,看它是否与条件匹配which
和max
/ min
搜索所有在步骤1中返回的索引并找到最大值/最小值 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
}
}