¿Cómo ordenar un vector de caracteres primero por letra y luego por número?

Tengo un vector de caracteres que contiene cadenas que comienzan con letras y con números:

sample.condition
[1] "1_t"   "2_t"   "3_t"   "4_t"   "5_t"   "6_t"   "7_t"   "GFP_t" "1_t"  
[10] "2_t"   "3_t"   "4_t"   "5_t"   "6_t"   "7_t"   "GFP_t"

El vector ordenado final debe tener los elementos que contienen "GFP" en las primeras posiciones:

sample.condition
[1] "GFP_t"   "GFP_t" "1_t"   "2_t"   "3_t"   "4_t"   "5_t"   "6_t"   "7_t"   "1_t"  
[10] "2_t"   "3_t"   "4_t"   "5_t"   "6_t"   "7_t"   

Intenté varios argumentos de clasificación pero no llegué a ninguna parte.

preguntado el 03 de diciembre de 13 a las 13:12

1 Respuestas

Encuentra las cuerdas que no comienzan con un número. Crear un índice lógico:

idx <- grepl("^[^0-9]", sample.condition)

Utilice este índice para crear subconjuntos y ordenar los subconjuntos. Luego, combine ambos subconjuntos ordenados:

c(sort(sample.condition[idx]), sort(sample.condition[!idx]))

#  [1] "GFP_t" "GFP_t" "1_t"   "1_t"   "2_t"   "2_t"   "3_t"   "3_t"  
#  [9] "4_t"   "4_t"   "5_t"   "5_t"   "6_t"   "6_t"   "7_t"   "7_t"    

Respondido el 03 de diciembre de 13 a las 13:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.