reshaping data so that I can take sum of every 3 columns
    3 views (last 30 days)
  
       Show older comments
    
Hi All,
I have a dataset something similar to following
   Name     Location     Nickname     saleCost
   rest1    east         Reast1       [5, 7, 9 , 2, 5, 1, 9, 11, 1]
   rest4    south        Rsouth4      [12, 9, 2, 3, 5, 10, 11, 4, 4]
   rest3    east         Reast3       [20, 2, 2, 3, 20, 30, 1, 3, 7]
   rest9    west         Rwest9       [1, 9, 3, 33, 22, 10, 6, 6, 8]
Note that saleCost is a dataset as well and as number of columns which are multiple of 3.
I want to add up every 3 columns so my resultant dataset is as follow
     Name     Location     Nickname     saleCost
     rest1    east         Reast1       [21, 8, 21]
     rest4    south        Rsouth4      [23, 17, 19]
     rest3    east         Reast3       [24, 53, 11]
     rest9    west         Rwest9       [13, 65, 20]
I tried using reshape() but could not use it correctly. WHat are my options?
Thanks
0 Comments
Accepted Answer
  Kelly Kearney
      
 on 30 Oct 2015
        When you say you have a dataset, do you mean a dataset array? I'm assuming so for the moment:
Your data:
tmp = {...
   'Name'    'Location'     'Nickname'     'saleCost'
   'rest1'    'east'         'Reast1'       [5, 7, 9 , 2, 5, 1, 9, 11, 1]
   'rest4'    'south'        'Rsouth4'      [12, 9, 2, 3, 5, 10, 11, 4, 4]
   'rest3'    'east'         'Reast3'       [20, 2, 2, 3, 20, 30, 1, 3, 7]
   'rest9'    'west'         'Rwest9'       [1, 9, 3, 33, 22, 10, 6, 6, 8]};
D = cell2dataset(tmp);
Reshape:
D.saleCost = reshape(sum(reshape(D.saleCost', 3, []),1), [], size(D.saleCost,1))'
D = 
      Name           Location       Nickname         saleCost                  
      'rest1'        'east'         'Reast1'         21           8          21
      'rest4'        'south'        'Rsouth4'        23          18          19
      'rest3'        'east'         'Reast3'         24          53          11
      'rest9'        'west'         'Rwest9'         13          65          20
Pretty much the same as Jelin's answer, but all in one command. Note that this applies to the entire array saleCost; you shouldn't need to loop over rows.
More Answers (1)
  Jacky Jo
 on 30 Oct 2015
        Is that you want..
saleCost=[5, 7, 9 , 2, 5, 1, 9, 11, 1;...
  12, 9, 2, 3, 5, 10, 11, 4, 4;...
  20, 2, 2, 3, 20, 30, 1, 3, 7;...
   1, 9, 3, 33, 22, 10, 6, 6, 8];
saleCost=reshape( reshape(saleCost',[],3) ,3,[]);
saleCost=reshape(sum(saleCost,1),3,[])'
See Also
Categories
				Find more on Web Services in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
