www.gusucode.com > matlab 案例源码 matlab代码程序 > matlab/SplitTableDataVariablesAndApplyFunctionsExample.m

    %% Split Table Data Variables and Apply Functions
% This example shows how to split power outage data from a table into groups 
% by region and cause of the power outages. Then it shows how to apply functions 
% to calculate statistics for each group and collect the results in a table.

% Copyright 2015 The MathWorks, Inc.


%% Load Power Outage Data
% The sample file, |outages.csv|, contains data representing electric utility 
% outages in the United States. The file contains six columns: |Region|, |OutageTime|, 
% |Loss|, |Customers|, |RestorationTime|, and |Cause|. Read |outages.csv| into 
% a table.
T = readtable('outages.csv');

%%
% Convert |Region| and |Cause| to categorical arrays, and |OutageTime| and 
% |RestorationTime| to |datetime| arrays. Display the first five rows.
T.Region = categorical(T.Region);
T.Cause = categorical(T.Cause);
T.OutageTime = datetime(T.OutageTime);
T.RestorationTime = datetime(T.RestorationTime);
T(1:5,:)

%% Calculate Maximum Power Loss
% Determine the greatest power loss due to a power outage in each region.
% The |findgroups| function returns |G|, a vector of group numbers created from 
% |T.Region|. The |splitapply| function uses |G| to split |T.Loss| into five 
% groups, corresponding to the five regions. |splitapply| applies the |max| function
% to each group and concatenates the maximum power losses into a vector.
G = findgroups(T.Region);
maxLoss = splitapply(@max,T.Loss,G)

%% 
% Calculate the maximum power loss due to a power outage by cause. To specify that 
% |Cause| is the grouping variable, use table indexing. Create a table that 
% contains the maximum power losses and their causes.
T1 = T(:,'Cause');
[G,powerLosses] = findgroups(T1);
powerLosses.maxLoss = splitapply(@max,T.Loss,G)

%%
% |powerLosses| is a table because |T1| is a table. You can append the maximum 
% losses as another table variable.
%
% Calculate the maximum power loss by cause in each region. To specify that 
% |Region| and |Cause| are the grouping variables, use table indexing. Create 
% a table that contains the maximum power losses and display the first 15 rows.
T1 = T(:,{'Region','Cause'});
[G,powerLosses] = findgroups(T1);
powerLosses.maxLoss = splitapply(@max,T.Loss,G);
powerLosses(1:15,:)

%% Calculate Number of Customers Impacted
% Determine power-outage impact on customers by cause and region. Because |T.Loss| 
% contains |NaN| values, wrap |sum| in an anonymous function to use the |'omitnan'| 
% input argument.
osumFcn = @(x)(sum(x,'omitnan'));
powerLosses.totalCustomers = splitapply(osumFcn,T.Customers,G);
powerLosses(1:15,:)

%% Calculate Mean Durations of Power Outages
% Determine the mean durations of all U.S. power outages in hours. Add the mean 
% durations of power outages to |powerLosses|. Because |T.RestorationTime| has |NaT| 
% values, omit the resulting |NaN| values when calculating the mean durations.
D = T.RestorationTime - T.OutageTime;
H = hours(D);
omeanFcn = @(x)(mean(x,'omitnan'));
powerLosses.meanOutage = splitapply(omeanFcn,H,G);
powerLosses(1:15,:)