У меня есть набор данных, и я прошу Matlab отсортировать их в порядке возрастания следующим образом:
filename=input('Type filename.txt: ','s');
fid=fopen(filename);
mydata=textscan(fid,'%f %c','headerlines', 1, 'delimiter','\t');
fclose(fid);
% sort data
[mydata{1},idx] = sort(mydata{1})
mydata{2} = mydata{2}(idx)
Данные были получены следующим образом:
0.41 U
0.41 U
0.41 U
0.41 D
0.41 U
0.41 D
0.41 U
0.41 U
0.41 D
0.41 U
0.42 U
0.42 D
0.42 U
0.42 U
0.42 U
0.42 D
0.43 U
U = undetect и D = Detects,Если вы внимательно заметите, если первый столбец имеет такое же число, скажем, 0,41, Matlab отсортирует первый столбец и проигнорирует порядок второго столбца.Я хотел бы, чтобы Matlab видел одно и то же число в первом столбце, а затем поместил число на основе второго столбца, сначала U перед D.
Окончательные отсортированные данные будут выглядеть следующим образом:
0.41 U
0.41 U
0.41 U
0.41 U
0.41 U
0.41 U
0.41 U
0.41 D
0.41 D
0.41 D
0.42 U
0.42 U
0.42 U
0.42 U
0.42 D
0.42 D
0.43 U
Если каким-то образом это облегчит задачу, я могу сделать 1 = Обнаружить и 0 = Не обнаружить. Спасибо за вашу помощь и время.
Редактировать: я также должен добавить, что sortrow не работает, потому что я быхотел бы сохранить структуру данных так, чтобы следующий код следовал
o=mydata{1} %index the first column of the array mydata
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