4

I have the following struct

data = 

                       id: [143x1 double]
                  datenum: [143x1 double]
                Timestamp: {143x1 cell}
         Min_F1_USA_40__u: [143x1 double]
         Max_F1_USA_40__u: [143x1 double]
        Mean_F1_USA_40__u: [143x1 double]
      Stddev_F1_USA_40__u: [143x1 double]
    MeanVals_F1_USA_40__u: [143x1 double]
          a0_F1_USA_40__u: [143x1 double]
          a1_F1_USA_40__u: [143x1 double]
          a2_F1_USA_40__u: [143x1 double]
          a3_F1_USA_40__u: [143x1 double]
      a4_F1_USA_40__u: [143x1 double]

So on, I have more than 50 field in the struct

I have other 3 structure with the same structure and I want to merge this struct

When I have 3 struct I will get the following structure

data = 

                       id: [429x1 double]
                  datenum: [429x1 double]
                Timestamp: {429x1 cell}
         Min_F1_USA_40__u: [429x1 double]
         Max_F1_USA_40__u: [429x1 double]
        Mean_F1_USA_40__u: [429x1 double]
      Stddev_F1_USA_40__u: [429x1 double]
        .
        .
        .
gnovice
  • 125,304
  • 15
  • 256
  • 359
Mokus
  • 10,174
  • 18
  • 80
  • 122

2 Answers2

3

Sorry, I had misunderstood your question - here a second try.

Maybe there is an easier way, but you can get a list of all fields in data using mynames=fieldnames(data). You can then loop through them all and assign them to a common struct like this:

combineddata.(mynames{i})=[data1.(mynames{i}); data2.(mynames{i}); data3.(mynames{i})];
Jonas Heidelberg
  • 4,984
  • 1
  • 27
  • 41
3

Here's one solution using the functions FIELDNAMES, CELLFUN, and CELL2STRUCT:

data = [data1 data2 data3 data4];    %# Create a structure array of your data
names = fieldnames(data);            %# Get the field names
cellData = cellfun(@(f) {vertcat(data.(f))},names);  %# Collect field data into
                                                     %#   a cell array
data = cell2struct(cellData,names);  %# Convert the cell array into a structure
gnovice
  • 125,304
  • 15
  • 256
  • 359