2012-11-19 14 views
5

Ich brauche etwas Hilfe bei der Bestimmung von mehr als einem Mindestwert in einem Vektor. Nehmen wir an, ich habe einen Vektor x:Bestimmen von Mindestwerten in einem Vektor in R

x<-c(1,10,2, 4, 100, 3) 

und möchten die Indizes der kleinsten 3 Elemente bestimmen, dh 1, 2 und 3. Ich brauche die Indizes, weil ich die Indizes für den Zugriff verwenden die entsprechenden Elemente in einem anderen Vektor. Natürlich liefert die Sortierung die Mindestwerte, aber ich möchte die Indizes ihres tatsächlichen Auftretens vor dem Sortieren wissen.

+0

Wie entscheiden Sie, dass 1, 2 und 3 die Mindestwerte sind? Fragen Sie eher allgemein, wie Sie den Index von Werten finden, die mit Werten in einem anderen Vektor übereinstimmen? Oder wie findet man die 3 kleinsten Werte und ihre Indizes? – Dason

Antwort

9

Um dies der Index versuchen zu finden

which(x %in% sort(x)[1:3]) # this gives you and index vector 
[1] 1 3 6 

Diese besagt, dass die ersten, dritten und sechsten Elemente die ersten drei niedrigsten Werte in den Vektor, sind zu sehen, welche diese sind try-Werte:

x[ which(x %in% sort(x)[1:3])] # this gives the vector of values 
[1] 1 2 3 

oder nur

x[c(1,3,6)] 
[1] 1 2 3 

Wenn Sie duplizierten Wert haben können Sie auswählen möchten eindeutige Werte zuerst und dann, um zu sortieren, den Index zu finden, wie diese (Vorgeschlagen von @Jeffrey Evans in seiner Antwort)

which(x %in% sort(unique(x))[1:3]) 
+1

Meine Lesung ist das OP will den Index – MattBagg

+0

@jilber. Vielen Dank – Shahzad

5

Ich glaube, Sie meinen Sie wissen wollen, was die Indizes von der Unterseite 3 Elemente? In diesem Fall möchten Sie order(x)[1:3]

3

Sie können unique verwenden, um doppelte Mindestwerte zu berücksichtigen.

x<-c(1,10,2,4,100,3,1) 
which(x %in% sort(unique(x))[1:3]) 
+1

nette Antwort. +1 –

3

Hier ist ein anderer Weg mit rank, die Duplikate enthält.

x <- c(x, 3) 
# [1] 1 10 2 4 100 3 3 
which(rank(x, ties.method='min') <= 3) 
# [1] 1 3 6 7