2013-07-19 15 views
8

Ho un vettore di interi diciamo 1-3 (può essere di più):Sort vettore di interi in specifici ordine (personalizzato)

x <- sample(1:3, 10, replace=T) 

[1] 1 3 1 2 2 1 3 2 3 2 

Se I sorta x avrò

sort(x) 
[1] 1 1 1 2 2 2 2 3 3 3 

Ma ho bisogno di 2 secondi prima, poi 1 secondo, poi 3 secondi.

[1] 2 2 2 2 1 1 1 3 3 3 

Quindi, se ho un vettore y = c(2, 1, 3), come posso usarlo per ordinamento?

E in realtà non ho bisogno dei valori stessi, ma dell'indice dei valori ordinati nel vettore originale, come ottengo dalla funzione order.

+0

Sono i numeri sempre da 1 a N? – Arun

+0

Nel mio caso, sì. – yuk

risposta

7

Una semplice rimappatura dei valori funziona:

x <- sample(1:3, 10, replace=T) 
x 
[1] 2 3 1 1 3 2 2 3 3 2 
order(c(2,1,3)[x]) 
[1] 1 6 7 10 3 4 2 5 8 9 
+0

Fantastico! Grazie! – yuk

8

Un'opzione alquanto complicata:

x[order(factor(x,levels = c(2,1,3)))] 

o ovviamente, solo il order presentare solo gli indici.

+0

Grazie! Funziona alla grande. Penso che la chiamata "as.integer" non sia necessaria. Destra? – yuk

+0

@ yuk Sì, credo che tu abbia ragione. – joran

Problemi correlati