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

    %% Create and Work with Tables 
% This example shows how to create a table from workspace variables, work with 
% table data, and write tables to files for later use. |table| is a data type 
% for collecting heterogeneous data and metadata properties such as variable 
% names, row names, descriptions, and variable units, in a single container.
%
% Tables are suitable for column-oriented or tabular data that are often stored 
% as columns in a text file or in a spreadsheet. Each variable in a table
% can have a different data type, but must have the same number of rows.
% However, variables in a table are not restricted to column vectors. For
% example, a table variable can contain a matrix with multiple columns as
% long as it has the same number of rows as the other table variables. A
% typical use for a table is to store experimental data, where rows represent 
% different observations and columns represent different measured variables.
%
% Tables are convenient containers for collecting and organizing related data 
% variables and for viewing and summarizing data. For example, you can extract 
% variables to perform calculations and conveniently add the results as new table 
% variables. When you finish your calculations, write the table to a file to save 
% your results.

%% Create and View Table
% Create a table from workspace variables and view it. Alternatively, use the 
% <docid:matlab_ref.busazkl-1> or the <docid:matlab_ref.btx_238-1> function to
% create a table from a spreadsheet or a text file. When you import data from a
% file using these functions, each column becomes a table variable.
%
% Load sample data for 100 patients from the |patients| MAT-file to workspace 
% variables.

load patients
whos

%%
% Populate a table with column-oriented variables that contain patient data. 
% You can access and assign table variables by name. When you assign a table 
% variable from a workspace variable, you can assign the table variable a different 
% name.
%
% Create a table and populate it with the |Gender|, |Smoker|, |Height|, and
% |Weight| workspace variables. Display the first five rows.
T = table(Gender,Smoker,Height,Weight);
T(1:5,:)

%%
% As an alternative, use the |readtable| function to read the patient data from 
% a comma-delimited file. |readtable| reads all the columns that are in a file.
%
% Create a table by reading all columns from the file, |patients.dat|.
T2 = readtable('patients.dat');
T2(1:5,:)

%%
% You can assign more column-oriented table variables using dot notation, |_T.varname_|, 
% where |_T_| is the table and |_varname_| is the desired variable name. Create 
% identifiers that are random numbers. Then assign them to a table variable, 
% and name the table variable |ID|. All the variables you assign to a table must 
% have the same number of rows. Display the first five rows of |T|.
T.ID = randi(1e4,100,1);
T(1:5,:)

%%
% All the variables you assign to a table must have the same number of
% rows.

%%
% View the data type, description, units, and other descriptive statistics 
% for each variable by creating a table summary using the |summary| function.

summary(T)
%%
% Return the size of the table.
size(T)

%%
% |T| contains 100 rows and 5 variables.
%
% Create a new, smaller table containing the first five rows of |T| and
% display it. You can use numeric indexing within parentheses to specify rows 
% and variables. This method is similar to indexing into numeric arrays to 
% create subarrays. |Tnew| is a 5-by-5 table.
Tnew = T(1:5,:)

%%
% Create a smaller table containing all rows of |Tnew| and the variables from the 
% second to the last. Use the |end| keyword to indicate the last variable or the last 
% row of a table. |Tnew| is a 5-by-4 table.
Tnew = Tnew(:,2:end)

%% Access Data by Row and Variable Names
% Add row names to |T| and index into the table using row and variable names 
% instead of numeric indices. Add row names by assigning the
% |LastName| workspace variable to the |RowNames| property of |T|.
T.Properties.RowNames = LastName;

%%
% Display the first five rows of |T| with row names.
T(1:5,:)

%%
% Return the size of |T|. The size does not change because row and variable
% names are not included when calculating the size of a table.
size(T)

%%
% Select all the data for the patients with the last names |'Smith'| and |'Johnson'|. 
% In this case, it is simpler to use the row names than to use numeric
% indices. |Tnew| is a 2-by-5 table.
Tnew = T({'Smith','Johnson'},:)

%%
% Select the height and weight of the patient named |'Johnson'| by indexing
% on variable names. |Tnew| is a 1-by-2 table.
Tnew = T('Johnson',{'Height','Weight'})

%%
% You can access table variables either with dot syntax, as in |T.Height|,
% or by named indexing, as in |T(:,'Height')|.

%% Calculate and Add Result as Table Variable
% You can access the contents of table variables, and then perform
% calculations on them using MATLAB(R) functions. Calculate body-mass-index (|BMI|) 
% based on data in the existing table variables and add it as a new variable. 
% Plot the relationship of |BMI| to a patient's status as a smoker or a nonsmoker. 
% Add blood-pressure readings to the table, and plot the relationship of blood 
% pressure to BMI.
%
% Calculate |BMI| using the table variables, |Weight| and |Height|. You can
% extract |Weight| and |Height| for the calculation while conveniently
% keeping |Weight|, |Height|, and |BMI| in the table with the rest of the patient
% data. Display the first five rows of |T|.
T.BMI = (T.Weight*0.453592)./(T.Height*0.0254).^2;

T(1:5,:)

%%
% Populate the variable units and variable descriptions properties for |BMI|.
% You can add metadata to any table variable to describe further the data
% contained in the variable.
T.Properties.VariableUnits{'BMI'} = 'kg/m^2';
T.Properties.VariableDescriptions{'BMI'} = 'Body Mass Index';

%%
% Create a histogram to explore whether there is a relationship between
% smoking and body-mass-index in this group of patients. You can index into
% |BMI| with the logical values from the |Smoker| table variable, because
% each row contains |BMI| and |Smoker| values for the same patient.

tf = (T.Smoker == false);
h1 = histogram(T.BMI(tf),'BinMethod','integers');
hold on
tf = (T.Smoker == true);
h2 = histogram(T.BMI(tf),'BinMethod','integers');
xlabel('BMI (kg/m^2)');
ylabel('Number of Patients');
legend('Nonsmokers','Smokers');
title('BMI Distributions for Smokers and Nonsmokers');
hold off

%%
% Add blood pressure readings for the patients from the workspace variables
% |Systolic| and |Diastolic|. Each row contains |Systolic|, |Diastolic|,
% and |BMI| values for the same patient.
T.Systolic = Systolic;
T.Diastolic = Diastolic;

%%
% Create a histogram to show whether there is a
% relationship between high values of |Diastolic| and |BMI|.
tf = (T.BMI <= 25);
h1 = histogram(T.Diastolic(tf),'BinMethod','integers');
hold on
tf = (T.BMI > 25);
h2 = histogram(T.Diastolic(tf),'BinMethod','integers');
xlabel('Diastolic Reading (mm Hg)');
ylabel('Number of Patients');
legend('BMI <= 25','BMI > 25');
title('Diastolic Readings for Low and High BMI');
hold off

%% Reorder Table Variables and Rows for Output
% To prepare the table for output, reorder the table rows by name, and table 
% variables by position or name. Display the final arrangement of the table.
%
% Sort the table by row names so that patients are listed in alphabetical
% order.
T = sortrows(T,'RowNames');

T(1:5,:)

%%
% Create a |BloodPressure| variable to hold blood pressure readings in a
% 100-by-2 table variable. 
T.BloodPressure = [T.Systolic T.Diastolic];

%%
% Delete |Systolic| and |Diastolic| from the table since they are
% redundant.
T.Systolic = [];
T.Diastolic = [];

T(1:5,:)

%%
% To put |ID| as the first column, reorder the table variables by position.
T = T(:,[5 1:4 6 7]);

T(1:5,:)

%%
% You also can reorder table variables by name. To reorder the table
% variables so that |Gender| is last:
%
% # Find |'Gender'| in the |VariableNames| property of the table.
% # Move |'Gender'| to the end of a cell array of variable names.
% # Use the cell array of names to reorder the table variables.
varnames = T.Properties.VariableNames;
others = ~strcmp('Gender',varnames);
varnames = [varnames(others) 'Gender'];
T = T(:,varnames);

%%
% Display the first five rows of the reordered table.
T(1:5,:)

%% Write Table to File
% You can write the entire table to a file, or create a subtable to write a
% selected portion of the original table to a separate file.
%
% Write |T| to a file with the |writetable| function.
writetable(T,'allPatientsBMI.txt');

%%
% You can use the |readtable| function to read the data in
% |allPatientsBMI.txt| into a new table.
%
% Create a subtable and write the subtable to a separate file. Delete the 
% rows that contain data on patients who are smokers. Then remove the 
% |Smoker| variable. |nonsmokers| contains data only for the patients who are 
% not smokers.
nonsmokers = T;
toDelete = (nonsmokers.Smoker == true);
nonsmokers(toDelete,:) = [];
nonsmokers.Smoker = [];

%%
% Write |nonsmokers| to a file.
writetable(nonsmokers,'nonsmokersBMI.txt');