Создание и работа с таблицами

Этот пример показывает, как составить таблицу от переменных рабочей области, работать с табличными данными и таблицами записи к файлам для более позднего использования. table является типом данных для сбора гетерогенных данных и свойств метаданных, таких как имена переменных, имена строки, описания и переменные модули, в единственном контейнере.

Таблицы подходят для ориентированных на столбец или табличных данных, которые часто хранятся как столбцы в текстовом файле или в электронной таблице. Каждая переменная в таблице может иметь различный тип данных, но должна иметь то же количество строк. Однако переменные в таблице не ограничиваются векторами - столбцами. Например, табличная переменная может содержать матрицу с несколькими столбцами, пока она имеет то же количество строк как другие табличные переменные. Типичное использование для таблицы должно хранить экспериментальные данные, где строки представляют различные наблюдения, и столбцы представляют различные измеренные переменные.

Таблицы являются удобными контейнерами для сбора и организации связанных переменных данных и для просмотра и суммирования данных. Например, можно извлечь переменные, чтобы выполнить вычисления и удобно добавить результаты как новые табличные переменные. Когда вы закончите свои вычисления, запишите таблицу в файл, чтобы сохранить ваши результаты.

Создание и просмотр таблицы

Составьте таблицу от переменных рабочей области и просмотрите ее. Также используйте Инструмент для импорта или функцию readtable, чтобы составить таблицу из электронной таблицы или текстового файла. Когда вы импортируете данные из файла с помощью этих функций, каждый столбец становится табличной переменной.

Загрузите демонстрационные данные для 100 пациентов от MAT-файла patients до переменных рабочей области.

load patients
whos
  Name                            Size            Bytes  Class      Attributes

  Age                           100x1               800  double               
  Diastolic                     100x1               800  double               
  Gender                        100x1             12212  cell                 
  Height                        100x1               800  double               
  LastName                      100x1             12416  cell                 
  Location                      100x1             15008  cell                 
  SelfAssessedHealthStatus      100x1             12340  cell                 
  Smoker                        100x1               100  logical              
  Systolic                      100x1               800  double               
  Weight                        100x1               800  double               

Заполните таблицу с ориентированными на столбец переменными, которые содержат терпеливые данные. Можно получить доступ и присвоить табличные переменные по наименованию. Когда вы присваиваете табличную переменную от переменной рабочей области, можно присвоить табличную переменную другое имя.

Составьте таблицу и заполните ее с Gender, Smoker, Height и переменными рабочей области Weight. Отобразите первые пять строк.

T = table(Gender,Smoker,Height,Weight);
T(1:5,:)
ans=5×4 table
     Gender     Smoker    Height    Weight
    ________    ______    ______    ______

    'Male'      true        71       176  
    'Male'      false       69       163  
    'Female'    false       64       131  
    'Female'    false       67       133  
    'Female'    false       64       119  

Как альтернатива, используйте функцию readtable, чтобы считать терпеливые данные из файла разделенных запятыми значений. readtable читает все столбцы, которые находятся в файле.

Составьте таблицу путем чтения всех столбцов из файла, patients.dat.

T2 = readtable('patients.dat');
T2(1:5,:)
ans=5×10 table
     LastName      Gender     Age             Location              Height    Weight    Smoker    Systolic    Diastolic    SelfAssessedHealthStatus
    __________    ________    ___    ___________________________    ______    ______    ______    ________    _________    ________________________

    'Smith'       'Male'      38     'County General Hospital'        71       176        1         124          93              'Excellent'       
    'Johnson'     'Male'      43     'VA Hospital'                    69       163        0         109          77              'Fair'            
    'Williams'    'Female'    38     'St. Mary's Medical Center'      64       131        0         125          83              'Good'            
    'Jones'       'Female'    40     'VA Hospital'                    67       133        0         117          75              'Fair'            
    'Brown'       'Female'    49     'County General Hospital'        64       119        0         122          80              'Good'            

Можно присвоить более ориентированные на столбец табличные переменные с помощью записи через точку, T.varname, где T является таблицей, и varname является желаемым именем переменной. Создайте идентификаторы, которые являются случайными числами. Затем присвойте их табличной переменной и назовите табличную переменную ID. Все переменные, которые вы присваиваете таблице, должны иметь то же количество строк. Отобразите первые пять строк T.

T.ID = randi(1e4,100,1);
T(1:5,:)
ans=5×5 table
     Gender     Smoker    Height    Weight     ID 
    ________    ______    ______    ______    ____

    'Male'      true        71       176      8148
    'Male'      false       69       163      9058
    'Female'    false       64       131      1270
    'Female'    false       67       133      9134
    'Female'    false       64       119      6324

Все переменные, которые вы присваиваете таблице, должны иметь то же количество строк.

Просмотрите тип данных, описание, модули и другую описательную статистику для каждой переменной путем создания табличных сводных данных использование функции summary.

summary(T)
Variables:

    Gender: 100x1 cell array of character vectors

    Smoker: 100x1 logical

        Values:

            True        34   
            False       66   

    Height: 100x1 double

        Values:

            Min          60   
            Median       67   
            Max          72   

    Weight: 100x1 double

        Values:

            Min          111  
            Median     142.5  
            Max          202  

    ID: 100x1 double

        Values:

            Min          120
            Median    5485.5
            Max         9706

Возвратите размер таблицы.

size(T)
ans = 1×2

   100     5

T содержит 100 строк и 5 переменных.

Составьте новую, меньшую таблицу, содержащую первые пять строк T, и отобразите его. Можно использовать числовую индексацию в круглых скобках, чтобы задать строки и переменные. Этот метод подобен индексации в числовые массивы, чтобы создать подмассивы. Tnew является таблицей 5 на 5.

Tnew = T(1:5,:)
Tnew=5×5 table
     Gender     Smoker    Height    Weight     ID 
    ________    ______    ______    ______    ____

    'Male'      true        71       176      8148
    'Male'      false       69       163      9058
    'Female'    false       64       131      1270
    'Female'    false       67       133      9134
    'Female'    false       64       119      6324

Составьте меньшую таблицу, содержащую все строки Tnew и переменных от второго до последнего. Используйте ключевое слово end, чтобы указать на последнюю переменную или последнюю строку таблицы. Tnew 5 4 таблица.

Tnew = Tnew(:,2:end)
Tnew=5×4 table
    Smoker    Height    Weight     ID 
    ______    ______    ______    ____

    true        71       176      8148
    false       69       163      9058
    false       64       131      1270
    false       67       133      9134
    false       64       119      6324

Доступ к данным строкой и именами переменных

Добавьте имена строки к T и индексируйте в таблицу с помощью строки и имен переменных вместо числовых индексов. Добавьте имена строки путем присвоения переменной рабочей области LastName свойству RowNames T.

T.Properties.RowNames = LastName;

Отобразите первые пять строк T с именами строки.

T(1:5,:)
ans=5×5 table
                 Gender     Smoker    Height    Weight     ID 
                ________    ______    ______    ______    ____

    Smith       'Male'      true        71       176      8148
    Johnson     'Male'      false       69       163      9058
    Williams    'Female'    false       64       131      1270
    Jones       'Female'    false       67       133      9134
    Brown       'Female'    false       64       119      6324

Возвратите размер T. Размер не изменяется, потому что строка и имена переменных не включены при вычислении размера таблицы.

size(T)
ans = 1×2

   100     5

Выберите все данные для пациентов с фамилиями 'Smith' и 'Johnson'. В этом случае более просто использовать имена строки, чем использовать числовые индексы. Tnew 2 5 таблица.

Tnew = T({'Smith','Johnson'},:)
Tnew=2×5 table
               Gender    Smoker    Height    Weight     ID 
               ______    ______    ______    ______    ____

    Smith      'Male'    true        71       176      8148
    Johnson    'Male'    false       69       163      9058

Выберите высоту и вес пациента под названием 'Johnson' путем индексации на именах переменных. Tnew 1 2 таблица.

Tnew = T('Johnson',{'Height','Weight'})
Tnew=1×2 table
               Height    Weight
               ______    ______

    Johnson      69       163  

Можно получить доступ к табличным переменным или с точечным синтаксисом, как в T.Height, или именованной индексацией, как в T(:,'Height') высота.

Вычисление и добавление результата как табличной переменной

Можно получить доступ к содержимому табличных переменных, и затем выполнить вычисления на них использующий функции MATLAB®. Вычислите индекс массы тела (BMI) на основе данных в существующих табличных переменных и добавьте его как новую переменную. Постройте график отношения BMI к состоянию пациента как курильщик или некурящий. Добавьте показания кровяного давления к таблице и постройте график отношения кровяного давления к BMI.

Вычислите BMI с помощью табличных переменных, Weight и Height. Можно извлечь Weight и Height для вычисления при удобном хранении Weight, Height и BMI в таблице с остальной частью терпеливых данных. Отобразите первые пять строк T.

T.BMI = (T.Weight*0.453592)./(T.Height*0.0254).^2;

T(1:5,:)
ans=5×6 table
                 Gender     Smoker    Height    Weight     ID      BMI  
                ________    ______    ______    ______    ____    ______

    Smith       'Male'      true        71       176      8148    24.547
    Johnson     'Male'      false       69       163      9058    24.071
    Williams    'Female'    false       64       131      1270    22.486
    Jones       'Female'    false       67       133      9134    20.831
    Brown       'Female'    false       64       119      6324    20.426

Заполните переменные модули и свойства описаний переменной для BMI. Можно добавить метаданные к любой табличной переменной, чтобы описать далее данные, содержавшиеся в переменной.

T.Properties.VariableUnits{'BMI'} = 'kg/m^2';
T.Properties.VariableDescriptions{'BMI'} = 'Body Mass Index';

Создайте гистограмму, чтобы исследовать, существует ли отношение между курением и индексом массы тела в этой группе пациентов. Можно индексировать в BMI с логическими значениями от табличной переменной Smoker, потому что каждая строка содержит BMI и значения Smoker для того же пациента.

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

Добавьте показания кровяного давления для пациентов от переменных рабочей области Systolic и Diastolic. Каждая строка содержит Systolic, Diastolic и значения BMI для того же пациента.

T.Systolic = Systolic;
T.Diastolic = Diastolic;

Создайте гистограмму, чтобы показать, существует ли отношение между высокими значениями Diastolic и 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

Переупорядочение табличных переменных и строк для Вывода

Чтобы подготовить таблицу к выводу, переупорядочьте строки таблицы по наименованию и табличные переменные положением или именем. Отобразите итоговое расположение таблицы.

Сортировка таблицы строкой называет так, чтобы пациенты были перечислены в алфавитном порядке.

T = sortrows(T,'RowNames');

T(1:5,:)
ans=5×8 table
                  Gender     Smoker    Height    Weight     ID      BMI      Systolic    Diastolic
                 ________    ______    ______    ______    ____    ______    ________    _________

    Adams        'Female'    false       66       137      8235    22.112      127          83    
    Alexander    'Male'      true        69       171      1300    25.252      128          99    
    Allen        'Female'    false       63       143      7432    25.331      113          80    
    Anderson     'Female'    false       68       128      1577    19.462      114          77    
    Bailey       'Female'    false       68       130      2239    19.766      113          81    

Создайте переменную BloodPressure, чтобы сдержать показания кровяного давления 100 2 табличная переменная.

T.BloodPressure = [T.Systolic T.Diastolic];

Удалите Systolic и Diastolic из таблицы, поскольку они избыточны.

T.Systolic = [];
T.Diastolic = [];

T(1:5,:)
ans=5×7 table
                  Gender     Smoker    Height    Weight     ID      BMI      BloodPressure
                 ________    ______    ______    ______    ____    ______    _____________

    Adams        'Female'    false       66       137      8235    22.112     127     83  
    Alexander    'Male'      true        69       171      1300    25.252     128     99  
    Allen        'Female'    false       63       143      7432    25.331     113     80  
    Anderson     'Female'    false       68       128      1577    19.462     114     77  
    Bailey       'Female'    false       68       130      2239    19.766     113     81  

Чтобы поместить ID как первый столбец, переупорядочьте табличные переменные положением.

T = T(:,[5 1:4 6 7]);

T(1:5,:)
ans=5×7 table
                  ID      Gender     Smoker    Height    Weight     BMI      BloodPressure
                 ____    ________    ______    ______    ______    ______    _____________

    Adams        8235    'Female'    false       66       137      22.112     127     83  
    Alexander    1300    'Male'      true        69       171      25.252     128     99  
    Allen        7432    'Female'    false       63       143      25.331     113     80  
    Anderson     1577    'Female'    false       68       128      19.462     114     77  
    Bailey       2239    'Female'    false       68       130      19.766     113     81  

Также можно переупорядочить табличные переменные по наименованию. Чтобы переупорядочить табличные переменные так, чтобы Gender был последним:

  1. Найдите 'Gender' в свойстве VariableNames таблицы.

  2. Переместите 'Gender' в конец массива ячеек имен переменных.

  3. Используйте массив ячеек имен, чтобы переупорядочить табличные переменные.

varnames = T.Properties.VariableNames;
others = ~strcmp('Gender',varnames);
varnames = [varnames(others) 'Gender'];
T = T(:,varnames);

Отобразите первые пять строк переупорядоченной таблицы.

T(1:5,:)
ans=5×7 table
                  ID     Smoker    Height    Weight     BMI      BloodPressure     Gender 
                 ____    ______    ______    ______    ______    _____________    ________

    Adams        8235    false       66       137      22.112     127     83      'Female'
    Alexander    1300    true        69       171      25.252     128     99      'Male'  
    Allen        7432    false       63       143      25.331     113     80      'Female'
    Anderson     1577    false       68       128      19.462     114     77      'Female'
    Bailey       2239    false       68       130      19.766     113     81      'Female'

Запись таблицы в файл

Можно записать целую таблицу в файл или создать подтаблицу, чтобы записать выбранный фрагмент исходной таблицы к отдельному файлу.

Запишите T в файл с функцией writetable.

writetable(T,'allPatientsBMI.txt');

Можно использовать функцию readtable, чтобы считать данные в allPatientsBMI.txt в новую таблицу.

Создайте подтаблицу и запишите подтаблицу в отдельный файл. Удалите строки, которые содержат данные по пациентам, которые являются курильщиками. Затем удалите переменную Smoker. nonsmokers содержит данные только для пациентов, которые не являются курильщиками.

nonsmokers = T;
toDelete = (nonsmokers.Smoker == true);
nonsmokers(toDelete,:) = [];
nonsmokers.Smoker = [];

Запишите nonsmokers в файл.

writetable(nonsmokers,'nonsmokersBMI.txt');

Смотрите также

| | | | | | | |

Связанные примеры

Больше о

Была ли эта тема полезной?