For loop through cell arrays
    24 views (last 30 days)
  
       Show older comments
    
I have a 1×4 cell array of 
{60×4 double}    {60×4 double}    {60×4 double}    {60×4 double}
and I need to;
-find the values at the 3rd column at the rows have "20" at the first column in each cell
-then eliminate zeros if there is any
-then take average 
As an illustration
          10         NaN           0         NaN                     20         NaN         623           1         
          10         NaN           0         NaN                     20         NaN           0         NaN
          20         NaN         310           1                     10         NaN          38           1
          20         NaN           0         NaN                     10         NaN           0         NaN
          20         NaN        1445           1                     10         NaN           0         NaN
the first cell should give the average of 310 and 1445, whereas the second cell should give 623.
I am thinking of a for loop but I couldnt make it work. Thanks in advance!
3 Comments
Accepted Answer
  Adam Danz
    
      
 on 24 Jun 2020
        
      Edited: Adam Danz
    
      
 on 25 Jun 2020
  
      If you want to do this in a loop, there are 4 steps I've outlined below.  
"c" is the 1x4 cell array.  
column3Means = nan(size(c)); 
for i = 1:numel(c)
    % Find rows where column 1 equals 20
    index1 = c{i}(:,1) == 20; 
    % Find rows where column 3 is not 0
    index2 = c{i}(:,3) ~= 0; 
    % Combine those indices
    idx = index1 & index2; 
    % Use the combined index to compute the mean
    column3Means(i) = mean(c{i}(idx,3),'omitnan');
end
FYI, the loop can be avoided using the cellfun() function.  
10 Comments
  Adam Danz
    
      
 on 25 Jun 2020
				Glad it worked out.  
The take-home message is:  learn/use indexing.  
Indexing is a superpower of Matlab.  My answer uses logical indexing but there are other types of indexing as well. 
More Answers (0)
See Also
Categories
				Find more on Cell Arrays in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

