How can I change one column of a .mat file ?
    3 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
    Pablo Heredia
 le 30 Jan 2017
  
    
    
    
    
    Commenté : Pablo Heredia
 le 30 Jan 2017
            I have a .mat file which is a 1769x97 matrix of numbers. The 97th column is composed of numbers going from 1 to 100 and I need to change them to numbers going from 1 to 4. There are 1769 values (around 18 for each number of the 100) so I can't do it by hand. I need to change the values between 1 and 5, 11 and 15, 21 and 25... to 1, the values between 6 and 10, 16 and 20... to 2, the values between 51 and 55, 61 and 65... to 3 and the values between 56 and 60, 66, and 70... to 4.
What I thought of doing was this:
      load matrix1769x97.mat %this creates my matrix called A in the workspace.
      for i=1:1769
              if A(i,97)== 1:5 || 11:15 || 21:25 || 31:35 || 41:45
                 A(i,97)== 1
              end
              if A(i,97)== 6:10 || 16:20 || 26:30 || 36:40 || 46:50
                 A(i,97)== 2 
              end
              if A(i,97)== 51:55 || 61:65 || 71:75 || 81:85 || 91:95
                 A(i,97)== 3 
              end
              if A(i,97)== 56:60 || 66:70 || 76:80 || 86:90 || 96:100
                 A(i,97)==4 
              end
      end
It doesn't work. What changes would you do to the code? And also, can I save the new A to another .mat file after doing this? How can I do it?
Thanks in advance! :-)
0 commentaires
Réponse acceptée
  Takuji Fukumoto
    
 le 30 Jan 2017
        I think you need to write conditional statement like here
if A(i,97)== 1:5 || A(i,97)== 11:15 || A(i,97)== || 21:25 ...
I simpify the structure. you can do that with this code.
        for i=1:1769
                if A(i,97)  <= 50
                    if mod(A(i,97),10) <= 5 && mod(A(i,97),10) ~= 0
                        A(i,97)= 1;
                    else
                        A(i,97)= 2;
                    end
                else
                    if mod(A(i,97),10) <= 5 && mod(A(i,97),10) ~= 0
                        A(i,97)= 3;
                    else
                        A(i,97)= 4;
                    end
                end
        end
Plus de réponses (1)
  Takuji Fukumoto
    
 le 30 Jan 2017
        You can replace data in a colum. Please see below.
imax1 = 100
imax2=4;
data = randi(imax1,[1769,97]);
newcol = randi(imax2,[1769,1]);
data(:,end) = newcol;
Voir également
Catégories
				En savoir plus sur Structures dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!