wake-up-neo.com

Finden Sie die Position des ersten Werts in einem Vektor, der größer als X ist

In R: Ich habe einen Vektor und möchte die Position des ersten Werts ermitteln, die größer als 100 ist.

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

min(which(v > 100))
27
Phil

Die meisten auf which und max basierenden Antworten sind langsam (insbesondere bei langen Vektoren), da sie den gesamten Vektor durchlaufen :

  1. x>100 wertet jeden Wert im Vektor aus, um festzustellen, ob er der Bedingung entspricht
  2. which und max/min durchsuchen alle in Schritt 1 zurückgegebenen Indizes und finden die Maximum Minimum

Position wertet die Bedingung nur aus, bis sie auf den ersten TRUE-Wert trifft, und gibt den entsprechenden Index sofort zurück, ohne den Rest des Vektors zu durchlaufen.

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

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

Check out which.max

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

Um nur zu erwähnen, Hadley Wickham hat eine Funktion, detect_index, implementiert, um genau diese Aufgabe in seinem Paket purrr für die funktionale Programmierung auszuführen.

Ich habe kürzlich detect_index selbst verwendet und würde es jedem anderen empfehlen, der das gleiche Problem hat.

Dokumentation für detect_index finden Sie hier: https://rdrr.io/cran/purrr/man/detect.html

4
Chill2Macht

Es gibt viele Lösungen, eine andere ist:

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