varias superponer studio modificar lineas histogramas hacer graficos graficas ejes como barras r sorting order rank

studio - superponer graficas en r



rango y orden en R (6)

En lenguaje sencillo, el order proporciona el lugar / posición real de un valor después de ordenar los valores Por ejemplo:

a<-c(3,4,2,7,8,5,1,6) sort(a) [1] 1 2 3 4 5 6 7 8

La posición de 1 en a es 7. De manera similar, la posición de 2 en a es 3.

order(a) [1] 7 3 1 2 6 8 4 5

Tengo problemas para entender la diferencia entre el rank la función R y el order función R. parecen producir el mismo resultado:

> rank(c(10,30,20,50,40)) [1] 1 3 2 5 4 > order(c(10,30,20,50,40)) [1] 1 3 2 5 4

¿Podría alguien arrojar algo de luz sobre esto para mí? Gracias


Resultó que este era un caso especial e hizo que las cosas fueran confusas. Explico a continuación para cualquier persona interesada:

rank devuelve el orden de cada elemento en una lista ascendente

order devuelve el índice que tendría cada elemento en una lista ascendente


Siempre me resulta confuso pensar en la diferencia entre los dos, y siempre pienso, "¿cómo puedo hacer para order usando el rank "?

Comenzando con el ejemplo de Justin:

Ordenar usando rango:

## Setup example to match Justin''s example set.seed(1) x <- sample(1:50, 30) ## Make a vector to store the sorted x values xx = integer(length(x)) ## i is the index, ir is the ith "rank" value i = 0 for(ir in rank(x)){ i = i + 1 xx[ir] = x[i] } all(xx==x[order(x)]) [1] TRUE


como está indicado por? order () en el prompt R, el orden simplemente devuelve una permutación que ordena el vector original en orden ascendente / descendente. supongamos que tenemos un vector

A<-c(1,4,3,6,7,4); A.sort<-sort(A);

entonces

order(A) == match(A.sort,A); rank(A) == match(A,A.sort);

además, encuentro que esa orden tiene la siguiente propiedad (no validada teóricamente):

1 order(A)∈(1,length(A)) 2 order(order(order(....order(A)....))):if you take the order of A in odds number of times, the results remains the same, so as to even number of times.


rank es más complicado y no necesariamente un índice (entero):

> rank(c(1)) [1] 1 > rank(c(1,1)) [1] 1.5 1.5 > rank(c(1,1,1)) [1] 2 2 2 > rank(c(1,1,1,1)) [1] 2.5 2.5 2.5 2.5


> set.seed(1) > x <- sample(1:50, 30) > x [1] 14 19 28 43 10 41 42 29 27 3 9 7 44 15 48 18 25 33 13 34 47 39 49 4 30 46 1 40 20 8 > rank(x) [1] 9 12 16 25 7 23 24 17 15 2 6 4 26 10 29 11 14 19 8 20 28 21 30 3 18 27 1 22 13 5 > order(x) [1] 27 10 24 12 30 11 5 19 1 14 16 2 29 17 9 3 8 25 18 20 22 28 6 7 4 13 26 21 15 23

rank devuelve un vector con el "rango" de cada valor. el número en la primera posición es el noveno más bajo. order devuelve los índices que pondrían el vector inicial x en orden.

El valor 27 de x es el más bajo, por lo que 27 es el primer elemento de order(x) - y si observas el rank(x) , el elemento 27 es 1 .

> x[order(x)] [1] 1 3 4 7 8 9 10 13 14 15 18 19 20 25 27 28 29 30 33 34 39 40 41 42 43 44 46 47 48 49