dahui
dahui

Reputation: 2166

Aggregate/sum function of a table in Matlab

In matlab I have read in a table from a csv file, then moved two columns I am interested in into a new table. These columns are "ID" (of a person, 1-400) and then another ID to represent their occupation (1-12).

What I want to do is create a simple table with 12 records and 2 columns, there is a record for each job, and the number of user IDs who have this job must be aggregated/summed, such a table could be easily bar charted. At the moment I have 400 user records, all with their IDs and one of the 12 possible job IDs.

So much like an SQL aggregate/sum function, but I want to do it in Matlab, with a table object. The problem I am having is finding how to do this without using a cell array or something similar.

Thanks!

Upvotes: 0

Views: 2061

Answers (2)

MeMyselfAndI
MeMyselfAndI

Reputation: 1320

I know that you found an answer yourself, but I would like to mention the histc function, which avoids the loop (and is faster for larger matrices):

JobCounts = histc(OccupationTable(:,2), 1:NumberOfJobs);

Combining this with the job number gives the desired result:

result = [(1:NumberOfJobs)' JobCounts]; 

Upvotes: 1

dahui
dahui

Reputation: 2166

Nevermind, solved it. Just looped through the job numbers and ran "sum" where the ID was equal to what I wanted:

for i = 1:1:NumberOfJobs;
    JobCounts(i,:) = sum(OccupationTable(:,2) == i);

end

Upvotes: 0

Related Questions