2011-12-23 30 views
5

私はtextscanを使って2列のデータをインポートしました。 は私が最初の列でデータをソートするので、データがこのMatlabのソート列

.47 D 
.48 U 
.51 U  
.57 D 
次のようになりたい

mydata= 

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

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

を検出しているD undetectとUがどこにあるデータは、このようになります

論理値を割り当てる次のコマンドが引き続きtrueになるようにセルの構造を保持したいと考えています。

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 

私はsortrowsについて読みましたが、この関数は数字だけを含む行列をソートするために使用されます。

数字と文字を混在させて並べ替えるソリューションはありますか。

答えて

8

1つのベクトルでSORTを実行し、別のベクトルにソートインデックスを適用できます。

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

ああ、それは私より立派です。 :) 'cell2mat(mydata(:、1)'を 'mydata {1}'に置き換えることで、もっと簡単にすることができます。 – 3lectrologos

+0

@ 3lectrologos:あなたの答えとコメントを見た前に私のエラーを見つけて修正しました。データ構造が問題になっています – yuk

+0

3electrologosとyukありがとうございました。 – user1009166

2

各セルは異なる「エンティティ」と見なされるため、セル配列を直接並べ替えることはできません。あなたはいつも、数字を並べ替える文字をソートするためにインデックスを使用して、セル配列に戻ってそれを置くことができます。

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