2011-12-23 13 views
5

Tengo 2 columnas de datos importados desde el uso de textscan. Los datos se parece a esto, donde T es undetect y D se detectarordenar columnas en Matlab

mydata= 

.51 U 
.57 D 
.48 U 
.47 D 

my data = [4x1 double] [4x1 char] 

Quiero ordenar los datos de la primera columna y lo que los datos se vería así

.47 D 
.48 U 
.51 U  
.57 D 

Me gustaría conservar la estructura de la celda para que el siguiente comando para asignar valor lógico siga siendo verdadero:

c = zeros(size(mydata,1),1); % preallocate empty matrix 

c = mydata{2} == 'U'; 
for i = 1:size(mydata,1) 
     curValue = mydata{i,2}; 
     data{i,3} = ~isempty(curValue) && ischar(curValue) && strcmp(curValue ,'U'); 
end 

He leído sobre sortrows pero la función se utiliza para ordenar la matriz que contiene solo números.

¿Alguien tiene una solución para ordenar matrices con una combinación de números y caracteres.

Respuesta

8

Puede SORT por un vector y aplicar el índice de clasificación a otro vector.

[mydata{1},idx] = sort(mydata{1}); 
mydata{2} = mydata{2}(idx); 
+0

Oh, eso es mejor que el mío. :) Puedes hacerlo incluso simper reemplazando 'cell2mat (mydata (:, 1)' por 'mydata {1}'. – 3lectrologos

+0

@ 3lectrologos: Encontré mi error y lo corrigí antes de ver tu respuesta y comentario. De alguna manera me perdí el estructura de datos en la pregunta. – yuk

+0

Gracias 3lectrologos y yuk. ¡Ambos códigos funcionaron! – user1009166

2

No creo que pueda ordenar directamente la matriz de celdas, porque cada celda se considera una "entidad" diferente. Siempre puede ordenar los números, usar los índices para ordenar los caracteres y luego volver a colocarlos en la matriz de celdas:

nums = mydata{1}; 
chars = mydata{2}; 
[~, ind] = sort(nums); 
sortednums = nums(ind); 
sortedchars = chars(ind); 
mydata{1} = sortednums; 
mydata{2} = sortedchars; 
Cuestiones relacionadas