2014-03-26 7 views
15

Ich suche nach einer Bedingung, die den Index eines Vektors zurückgibt, der eine Bedingung erfüllt.Den Index in einem Vektor finden, der eine Bedingung erfüllt

Zum Beispiel- Ich habe einen Vektor b = c(0.1, 0.2, 0.7, 0.9) Ich möchte den ersten Index von b, für die sagen, b> 0,65. In diesem Fall sollte die Antwort 3

sein habe ich versucht, which.min(subset(b, b > 0.65)) Aber das gibt mir 1 statt 3

Bitte helfen

Antwort

15

Verwendung which und nimmt das erste Element des Ergebnisses:

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

können Sie which.max verwenden:

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

Von ?which.max: „Für eine logische Vektor x, [...] which.max(x) return [s] der Index des ersten [...] TRUE

b > 0.65 
# [1] FALSE FALSE TRUE TRUE 

Sie auch einen Blick auf das Ergebnis haben sollte Ihr Code subset(b, b > 0.65) zu sehen, warum es Ihnen nicht das gewünschte Ergebnis geben kann.

1

Seien Sie vorsichtig, which.max ist falsch, wenn die Bedingung nie erfüllt ist, ist es nicht NA zurück:

> 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 

Warum? Wenn alle Elemente gleich sind, which.max Erträge 1:

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

Hinweis: FALSCH < TRUE

Verwandte Themen